【JAVA基础】算法与集合

1 查找

1.1 二分查找

public class Main {public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {
//数组必须有序int[] arr={1,2,4,5,6,24,123};System.out.println(binarySearch(arr,123));//6}public static int  binarySearch(int[] arr,int num){int min=0;int max=arr.length-1;while (true){if(min>max){return -1;}int middle=(max+min)/2;if(arr[middle]>num){max=middle-1;}else if(arr[middle]<num){min=middle+1;}else{return middle;}}};
}

1.2 插值查找

数据要有顺序

1.3 分块查找

索引表 

 

package DEMO1;import java.io.IOException;
import java.text.ParseException;public class Main {public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {int[] arr={5,4,3,2,7,9,8,6,11,14,13,15};Block b1=new Block(5,0,3);Block b2=new Block(9,4,7);Block b3=new Block(15,8,11);
//        创建索引表Block[] blockarr={b1,b2,b3};
//        要查找的元素int num=9;System.out.println(getIndex(blockarr,arr,num));//5}private static int getIndex(Block[] blockarr, int[] arr, int num) {int n=NumBlock(blockarr,num);if (n == -1) {return -1;}int start=blockarr[n].getStartIndex();int end=blockarr[n].getEndIndex();for (int i = start; i < end; i++) {if (arr[i] == num) {return i;}}return -1;};//num在哪一块private static int NumBlock(Block[] blockarr, int num) {for (int i = 0; i < blockarr.length; i++) {if(num<=blockarr[i].getMax()){return i;}}return -1;};
}
class Block{private int max;private int startIndex;private int endIndex;//ptg生成public Block() {}public Block(int max, int startIndex, int endIndex) {this.max = max;this.startIndex = startIndex;this.endIndex = endIndex;}/*** 获取* @return max*/public int getMax() {return max;}/*** 设置* @param max*/public void setMax(int max) {this.max = max;}/*** 获取* @return startIndex*/public int getStartIndex() {return startIndex;}/*** 设置* @param startIndex*/public void setStartIndex(int startIndex) {this.startIndex = startIndex;}/*** 获取* @return endIndex*/public int getEndIndex() {return endIndex;}/*** 设置* @param endIndex*/public void setEndIndex(int endIndex) {this.endIndex = endIndex;}public String toString() {return "Block{max = " + max + ", startIndex = " + startIndex + ", endIndex = " + endIndex + "}";}
}

 1.4 hash查找

2 排序

2.1 冒泡排序

int[] arr={4,5,2,1,3};for(int j=0;j<arr.length;j++){for (int i = arr.length-1; i >0; i--) {if(arr[i]<arr[i-1]){int temp=arr[i-1];arr[i-1]=arr[i];arr[i]=temp;}}}for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);//1 2 3 4 5}

2.2选择排序

2.3 插入排序

        int[] arr={4,5,2,1,3};
//        1.记录无序数组第一个索引int start = -1;for (int i = 1; i < arr.length; i++) {if(arr[i-1]>arr[i]){start=i;break;}}
//          2.遍历无序数组for (int i = start; i < arr.length; i++) {int j=i;while(j>0&&arr[j-1]>arr[j]){int temp=arr[j];arr[j]=arr[j-1];arr[j-1]=temp;j--;}}for (int j : arr) {System.out.println(j);}

2.4 快速排序

     int[] arr={4,5,2,1,3};long start=System.currentTimeMillis();quick(arr,0,arr.length-1);for(int i:arr){System.out.println(i);//1 2 3 4 5}long end= System.currentTimeMillis();System.out.println(end-start);//执行快速排序所花的时间}public static void quick(int arr[],int start,int end){//第一轮int i=start;int j=end;if(start>end){//递归出口return;}int basicN=arr[start];while (start!=end){while (true){if(end<=start||arr[end]<basicN)break;end--;}while (true){if(end<=start||arr[start]>basicN)break;start++;}int temp=arr[start];arr[start]=arr[end];arr[end]=temp;}int temp=arr[start];arr[start]=arr[i];arr[i]=temp;quick(arr,i,start-1);quick(arr,start+1,j);

3 集合

3.1 集合体系结构

单链集合Collection

双列集合Map

list 允许重复,set不允许重复

有序:存和取的元素顺序一致(队列)

3.2 Collection集合

3.2.1 方法

public class Frog   {public static void main(String[] args) {
//        Collection是一个接口,不能直接创建其对象Collection<String> co=new ArrayList<>();co.add("11");co.add("22");System.out.println(co);//[11, 22]
//        全部清空
//        co.clear();System.out.println(co.remove("11"));//trueSystem.out.println(co);//[22]
//        是否包含//底层依赖equals判断,如果存储自定义对象用contains,要重写System.out.println(co.contains("22"));//trueCollection<Dog> coDog=new ArrayList<>();Dog d1=new Dog("do1",18);Dog d3=new Dog("do1",18);coDog.add(d1);coDog.add(d3);System.out.println(d1.equals(d3));//trueSystem.out.println(coDog.isEmpty());//false//集合长度System.out.println(coDog.size());//2}
}

 Dog.java

public class Dog {private String name;private int age;public Dog() {}public Dog(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Dog dog = (Dog) o;return age == dog.age && Objects.equals(name, dog.name);}public String toString() {return "Dog{name = " + name + ", age = " + age + "}";}
}

 Dog.java需要重写equals方法:点到底就可以 

 3.2.2 遍历

 1 迭代器遍历

不依赖索引

public class Frog   {public static void main(String[] args) {
//        Collection是一个接口,不能直接创建其对象Collection<String> co=new ArrayList<>();co.add("11");co.add("22");co.add("33");
//        迭代器Iterator<String> it=co.iterator();
//        hasNext()判断当前元素是否有值while (it.hasNext()){//next();获取当前元素,并将迭代器对象移到下一个位置//循环中只能用一次next方法,如用多次该值给变量String s=it.next();//System.out.println(it.next());NoSuchElementException,循环只能用一次next方法System.out.println(s);
//            当上面循环结束,迭代器指针指向没有元素的位置//            迭代器遍历,不能用集合的方法删除或者添加if("33".equals(s)){//  co.add("45");//ConcurrentModificationException//添加没办法,删除可以用迭代器对象删除it.remove();}}//System.out.println(it.next());//NoSuchElementException没有索引异常,只是没有元素
//        迭代器遍历完毕,指针不会复位System.out.println(it.hasNext());//false}
}
2 增强for遍历

内部是Iterator迭代器

单列集合、数组用增强for遍历

        Collection<String> co=new ArrayList<>();co.add("11");co.add("22");co.add("33");
//        快捷:co.for//遍历时只是把数据交给s记录,改变s的值不会改变co的值for(String s:co){System.out.println(s);}
3 Lambda表达式遍历

Lambda表达式(匿名函数)前提:必须是函数接口匿名内部类,接口中只能有一个抽象方法

省略规则:

//        Collection是一个接口,不能直接创建其对象Collection<String> co=new ArrayList<>();co.add("11");co.add("22");co.add("33");//自己遍历集合,获得每一个元素,传递给accept方法co.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});
//        简化版本co.forEach((String s)-> {System.out.println(s);});
//        更简化版本co.forEach(s->System.out.println(s));
}}

3.3 List集合

       List<Integer> list=new ArrayList<>();list.add(1);list.add(2);list.add(3);System.out.println(list);//[1, 2, 3]//原来索引元素依次往后移list.add(1,4);System.out.println(list);//[1, 4, 2, 3]
//        当方法重载调用,删除元素优先删除实参与形参一致的方法//调用value==1的还是index==1?list.remove(1);System.out.println(list);//[1, 2, 3]list.add(1,4);
//        手动装箱Integer i=Integer.valueOf(1);list.remove(i);System.out.println(list);//[4, 2, 3]
//        修改Integer in=list.set(0,5);System.out.println(in);//4System.out.println(list);//[5, 2, 3]
//        获取值System.out.println(list.get(2));//3

remove两种方法,当方法重载调用,删除元素优先删除实参与形参一致的方法

遍历

public class Frog   {public static void main(String[] args) {List<Integer> list=new ArrayList<>();list.add(1);list.add(2);Iterator<Integer> it=list.iterator();while (it.hasNext()){Integer it1=it.next();System.out.println(it1);//1 2}for(Integer i:list){System.out.println(i);//1 2}list.forEach(new Consumer<Integer>() {@Overridepublic void accept(Integer integer) {System.out.println(integer);//1 2}});list.forEach(integer-> System.out.println(integer));//1 2for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}}}

3.4 ArrayList集合

查看源码:

ctrl+n:搜索ArrayList

alt+7或者ctrl+f12:

3.4.1 空参构造

public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}

 选中elementData:ctrl+b

transient Object[] elementData;
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

 当用空参构造创建对象,底层创建一个长度为0的数组

3.4.2 add

ArrayList<Integer> arr=new ArrayList<>();arr.add(1);
public boolean add(E e) {modCount++;
//e:当前要添加的元素
//elementData:底层数组名
//size:集合的长度/当前元素应存入的位置add(e, elementData, size);return true;}

跟进中间add方法

private void add(E e, Object[] elementData, int s) {if (s == elementData.length)
//新方法满了用无参grow方法扩容elementData = grow();elementData[s] = e;size = s + 1;}
private Object[] grow() {
//有参growreturn grow(size + 1);}
private Object[] grow(int minCapacity) {
//第一次添加, minCapacity=1,oldCapacity=0int oldCapacity = elementData.length;
//如果老容量不等于0或者数组不等于空数组if (oldCapacity > 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {//计算数组新长度int newCapacity = ArraysSupport.newLength(oldCapacity,
//如果10个存满要扩容,此时minCapacity - oldCapacity=11-10=1minCapacity - oldCapacity, /* minimum growth */oldCapacity >> 1           /* preferred growth */);
//copyOf进行老数组复制到新数组,elementData是老的数组,newCapacity是新的数组长度return elementData = Arrays.copyOf(elementData, newCapacity);} else {
//Math.max比较谁大,DEFAULT_CAPACITY=10.minCapacity=1return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)];}}
 //如果10个存满要扩容,oldLength=10,minGrowth=1,prefGrowth=5
public static int newLength(int oldLength, int minGrowth, int prefGrowth) {// preconditions not checked because of inlining// assert oldLength >= 0// assert minGrowth > 0
//比较的原因是新增的数可能比老容量多得多,集合可以一次添加多个元素int prefLength = oldLength + Math.max(minGrowth, prefGrowth); // might overflowif (0 < prefLength && prefLength <= SOFT_MAX_ARRAY_LENGTH) {return prefLength;} else {// put code cold in a separate methodreturn hugeLength(oldLength, minGrowth);}}

3.5 LinkedList集合

底层是双链表

  //内部类,表示链表结点private static class Node<E> {
//表示现在我要存储的数据E item;
//下一个节点的地址值Node<E> next;
//前一个节点的地址值Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}}
public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{transient int size = 0;transient Node<E> first;transient Node<E> last;//使用空参构造,其成员变量存在,但都是默认值public LinkedList() {}
 public boolean add(E e) {linkLast(e);return true;}
  void linkLast(E e) {final Node<E> l = last;final Node<E> newNode = new Node<>(l, e, null);last = newNode;if (l == null)first = newNode;elsel.next = newNode;size++;modCount++;}

4 泛型 

没有给集合指定类型,那么默认都是Object类型,如多态一样不能访问子类的特有功能

泛型不能写基本数据类型,因为不是object类

4.1 泛型类

MyArrayList.java 

public class MyArrayList<E> {Object[] obj=new Object[10];int size;
//    E表示不确定的类型public boolean add(E e){obj[size]=e;size++;return true;}public E get(int index){return (E)obj[index];    }
//作用:打印的不是地址值,而是属性值@Overridepublic String toString() {
//        把数组所有元素都拼接为字符串再返回return Arrays.toString(obj);}
}

Frog.java 

public class Frog   {public static void main(String[] args) {//String传给EMyArrayList<String> list=new MyArrayList<>();list.add("111");list.add("112");String s=list.get(1);System.out.println(s);//112
}}

4.2 泛型方法

MyArrayList.java 

public class MyArrayList {
//    第一个<E>表示我已经定义的不确定类型E//E...e 表示可变参数,传一个或者多个都可以,底层是数组public static <E> void addL(ArrayList<E> list, E...e){//e.for回车:快捷,增强forfor (E e1:e){list.add(e1);}}
}

Frog.java  

public class Frog   {public static void main(String[] args) {ArrayList<String> arr= new ArrayList<>();MyArrayList.addL(arr,"1","2","3");System.out.println(arr);//[1, 2, 3]
}}

4.3 泛型接口

//java定义的泛型接口public interface List<E> extends Collection<E> {...}//使用方式1
public class Frog implements List<String> {}//使用方式2
public class Frog<E>  implements List<E> {}

4.4 泛型通配符

5 set集合

方法基本与Collection的API一致

5.1 HashSet

无序、不重复、无索引。无序指的是存和取有可能不一样

底层:哈希表。哈希表组成:JDK8之前:数组+链表;JDK8之后:数组+链表+红黑树​​​​​​

哈希值:根据hashCode()计算的int整数,确定数据添加到数组哪个位置,然后用equals方法看属性值是否相等。所以存储自定义对象,一定要重写这两个方法

public class Frog {public static void main(String[] args) {Dog do1=new Dog("do1",19);Dog do2=new Dog("do1",19);
//        没有重写hashCode方法,不同对象计算的哈希值不同
//        重写hashCode方法,不同对象属性值相同,计算的哈希值相同System.out.println(do1.hashCode());//没有重写1078694789 重写3088270System.out.println(do2.hashCode());//没有重写1831932724 重写3088270Dog do3=new Dog("do3",19);Dog do4=new Dog("do4",112);HashSet<Dog> hash=new HashSet<>();System.out.println(hash.add(do1));//trueSystem.out.println(hash.add(do2));//falseSystem.out.println(hash.add(do3));//trueSystem.out.println(hash.add(do4));//true//不重写hash方法相同的属性也会打印System.out.println(hash);//[Dog{name = do1, age = 19}, Dog{name = do3, age = 19}, Dog{name = do4, age = 112}]}
}

重写hashCode()不需要自己写

5.2 LinkedHashSet

有序、不重复、无索引

相比HashSet每个元素多了双链表记录存储顺序

5.3 TreeSet

 可排序、不重复、无索引

基于红黑树

Dog.java

  @Overridepublic int compareTo(Dog o) {//指定排序规则,年龄升序排列return this.age-o.age;}

 Frog.java

public class Frog {public static void main(String[] args) {Dog do1=new Dog("do1",16);Dog do2=new Dog("do1",12);Dog do3=new Dog("do3",19);TreeSet<Dog> ts=new TreeSet<>();ts.add(do3);ts.add(do1);ts.add(do2);System.out.println(ts);//[Dog{name = do1, age = 12}, Dog{name = do1, age = 16}, Dog{name = do3, age = 19}]}
}

public class Frog {public static void main(String[] args) {Dog do1=new Dog("do1",16);Dog do2=new Dog("do1",12);Dog do3=new Dog("do3",19);TreeSet<Dog> ts=new TreeSet<>();ts.add(do3);ts.add(do1);ts.add(do2);System.out.println(ts);//[Dog{name = do1, age = 12}, Dog{name = do1, age = 16}, Dog{name = do3, age = 19}]//Comparator比较器排序//存入四个字符串长度排序,长度一样字母排序TreeSet<String> tss=new TreeSet<>(new Comparator<String>() {//lambda前提:compare接口必须是函数接口@Overridepublic int compare(String o1, String o2) {int i=o1.length()-o2.length();//w为0就用默认的匹配规则i=i==0?o1.compareTo(o2):i;return i;}});TreeSet<String> tss1=new TreeSet<>((String o1, String o2)-> {int i=o1.length()-o2.length();//w为0就用默认的匹配规则i=i==0?o1.compareTo(o2):i;return i;});TreeSet<String> tss2=new TreeSet<>((o1, o2)-> {int i=o1.length()-o2.length();//w为0就用默认的匹配规则i=i==0?o1.compareTo(o2):i;return i;});tss.add("aa");tss.add("aab");tss.add("bb");tss.add("a");System.out.println(tss);//[a, aa, bb, aab]}
}

 Dog.java

//默认排序,JavaBean类实现Comparable接口
public class Dog implements Comparable<Dog>{private String name;private int age;public Dog() {}public Dog(String name, int age) {this.name = name;this.age = age;}@Overridepublic int compareTo(Dog o) {//指定排序规则,年龄升序排列return this.age-o.age;}
}

 6 Arrays

        int[] arr={1,2,3,4,5,6};
//        将数组变为字符串,底层:StringBuilder,append方法System.out.println(Arrays.toString(arr));
//        二分查找元素System.out.println(Arrays.binarySearch(arr,4));//索引为3//查找元素不存在,-索引点-1,索引点是应该插入的位置,-1是因为找0返回的是-0,容易误解System.out.println(Arrays.binarySearch(arr,8));//-7int[] new1=Arrays.copyOf(arr,10);//底层System.arraycopy();System.out.println(Arrays.toString(new1));//[1, 2, 3, 4, 5, 6, 0, 0, 0, 0]System.out.println(new1);//[I@41629346//包头不包尾int[] new2=Arrays.copyOfRange(arr,0,4);System.out.println(Arrays.toString(new2));//[1, 2, 3, 4]//底层:循环赋值Arrays.fill(new2,100);System.out.println(Arrays.toString(new2));//[100, 100, 100, 100]Integer[] arri={1,2,3,4,5};//o1-o2 升序 o2-o1 降序//o2 有序序列的元素,o1 无序序列的元素//只能给引用类型数据排序Arrays.sort(arri, new Comparator<>() {@Overridepublic int compare(Integer o1, Integer o2) {return 0;}
});

7 算法题

        Dog do1=new Dog("do1",18,180);Dog do2=new Dog("do2",18,181);Dog do3=new Dog("do3",9,176);Dog do4=new Dog("do4",1,121);Dog[] arr={do1,do2,do3,do4};Arrays.sort(arr, new Comparator<Dog>() {
//            o1,无序序列的元素,o2有序序列的元素//返回值为负,插入前面,>=0 插入后面@Overridepublic int compare(Dog o1, Dog o2) {double d1=o1.getAge()-o2.getAge();d1=d1==0?o1.getHeight()- o2.getHeight():d1;d1=d1==0?o1.getName().compareTo(o2.getName()):d1;if(d1>0){return 1;}else if(d1<0){return -1;}else{   return 0;}}});System.out.println(Arrays.toString(arr));
//[Dog{name = do4, age = 1, height = 121}, Dog{name = do3, age = 9, height = 176}, Dog{name = do1, age = 18, height = 180}, Dog{name = do2, age = 18, height = 181}]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2869756.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Python深度学习之路:TensorFlow与PyTorch对比【第140篇—Python实现】

Python深度学习之路&#xff1a;TensorFlow与PyTorch对比 在深度学习领域&#xff0c;TensorFlow和PyTorch是两个备受青睐的框架&#xff0c;它们为开发人员提供了强大的工具来构建和训练神经网络模型。本文将对这两个框架进行对比&#xff0c;探讨它们的优势和劣势&#xff0…

Linux_网络项目_WEB服务器 处理服务器写入失败后sigpipe信号导致服务器崩溃退出问题,引入线程池缓解大量请求,服务器组件化重构,在线计算机业务测试

文章目录 1. 处理服务器写入管道出错2. 引入线程池缓解大量请求导致服务器崩溃设计线程任务类单例线程池组件设计 3.代码位置4. 在线计算机业务运行截图 1. 处理服务器写入管道出错 经过测试&#xff0c;服务器在读取报文时如果出错可以选择直接关闭这个TCP里链接来节省资源。…

langchain+chatglm3+BGE+Faiss Linux环境安装依赖

前言 本篇默认读者已经看过之前windows版本&#xff0c;代码就不赘述&#xff0c;本次讲述是linux环境配置 超短代码实现&#xff01;&#xff01;基于langchainchatglm3BGEFaiss创建拥有自己知识库的大语言模型(准智能体)本人python版本3.11.0&#xff08;windows环境篇&…

Find My游戏机|苹果Find My技术与游戏机结合,智能防丢,全球定位

游戏机&#xff0c;又名电子游乐器是使用游戏软件进行玩乐的机器。依照进行游戏的方式的不同&#xff0c;又分为家用游戏机及掌上游戏机。游戏机也可以说是属于电脑的一种&#xff0c;电子游戏机针对影像、音效与操作机能进行特别的强化&#xff0c;也有各种的软件和硬件可供安…

Scala第四章节(分支结构的格式和用法、for循环和while循环、控制跳转语句以及循环案例)

Scala第四章节 章节目标 掌握分支结构的格式和用法掌握for循环和while循环的格式和用法掌握控制跳转语句的用法掌握循环案例理解do.while循环的格式和用法 1. 流程控制结构 1.1 概述 在实际开发中, 我们要编写成千上万行代码, 代码的顺序不同, 执行结果肯定也会受到一些影响…

2.26回顾章节主体线索脉络,课程要求(评分)

3)翻译程序、汇编程序、编译程序、解释程序有什么差别&#xff1f;各自的特性是什么&#xff1f; 翻译程序是指把高级语言源程序翻译成机器语言程序&#xff08;目标代码&#xff09;的软件。 翻译程序有两种&#xff1a;一种是编译程序&#xff0c;它将高级语言源程序一次全部…

紫色星空月亮404网页模板源码

紫色星空月亮404网页模板源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 源码下载 紫色星空月亮404网页模板源码

zookeeper快速入门二:zookeeper基本概念

本文是zookeeper系列之快速入门中的第二篇&#xff0c;欢迎大家观看与指出不足。 目录 一、zookeeper的存储结构 二、什么是znode 三、znode节点的四种类型 四、权限控制ACL&#xff08;Access Control List&#xff09; 五、事件监听watcher 一、zookeeper的存储结构 z…

练习8 Web [GYCTF2020]Blacklist

这道题其实不是堆叠注入&#xff0c;但是我在联合查询无效后&#xff0c;试了一下堆叠&#xff0c;最后一步发现被过滤的sql语句太多了&#xff0c;完全没法 查阅其他wp的过程[GYCTF2020]Blacklist 1&#xff08;详细做题过程&#xff09; 是用的handler语句&#xff0c;只能用…

控制学习_正弦波无刷直流力矩电机建模、控制带宽讨论与选择

无刷电机通过电子换向器实现定子的磁场旋转&#xff0c;去电刷后使用寿命大幅提升&#xff0c;是现在更流行的选择。三相无刷电机则是无刷电机中比较流行的一款。三相无刷电机的驱动方式有多种&#xff0c;最简单的被称为梯形波驱动、方波驱动或正弦波驱动。而正弦波驱动技术可…

【工具】一键生成动态歌词字幕

那眼神如此熟悉 让人着迷无力抗拒 一次又一次相遇 在眼前却遥不可及 命运总爱淘气 将一切都藏匿 曾有你的回忆 无痕迹 若不是心心相吸 又怎么会一步一步靠近 &#x1f3b5; 董真《思如雪》 下载LRC歌词 https://www.musicenc.com/article/50287.htmlhttp…

这次玩个猛的,复现 2000 年前碳化卷轴

公元79年10月24日&#xff0c;意大利的维苏威火山爆发&#xff0c;一天之内就毁灭了两万多人的庞贝古城。 火山灰掩盖了整座城市&#xff0c;其中有一栋房子存放了各种书籍。直到18世纪&#xff0c;这栋房子才重新被发现&#xff0c;下面是考古学家的建筑复原图。 房子里面的1…

本地用AIGC生成图像与视频

最近AI界最火的话题&#xff0c;当属Sora了。遗憾的是&#xff0c;Sora目前还没开源或提供模型下载&#xff0c;所以没法在本地跑起来。但是&#xff0c;业界有一些开源的图像与视频生成模型。虽然效果上还没那么惊艳&#xff0c;但还是值得我们体验与学习下的。 Stable Diffu…

基于粒子群算法的分布式电源配电网重构优化matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1基本PSO算法原理 4.2配电网重构的目标函数 5.完整工程文件 1.课题概述 基于粒子群算法的分布式电源配电网重构优化。通过Matlab仿真&#xff0c;对比优化前后 1.节点的电压值 2.线路的损耗,这里计…

阿里二面:什么情况会发生Full GC?如何避免频繁Full GC?

阿里二面&#xff1a;什么情况会发生Full GC&#xff1f;如何避免频繁Full GC&#xff1f; Minor GC、Major GC 和 Full GC区别&#xff1f; Minor GC、Major GC和Full GC是垃圾回收中的三个重要概念&#xff0c;它们描述了垃圾回收的不同阶段和范围&#xff1a; Minor GC&am…

【leetcode热题】 分数到小数

给定两个整数&#xff0c;分别表示分数的分子 numerator 和分母 denominator&#xff0c;以 字符串形式返回小数 。 如果小数部分为循环小数&#xff0c;则将循环的部分括在括号内。 如果存在多个答案&#xff0c;只需返回 任意一个 。 对于所有给定的输入&#xff0c;保证 …

【SQL Server】实验七 数据完整性

1 实验目的 掌握实体完整性、参照完整性和用户自定义完整性约束的创建方法。掌握完整性约束的运行检查机制。掌握参照完整性的级联删除和修改方法。掌握正确设计关系模式完整性约束的方法。 2 实验内容 2.1 掌握实体完整性约束的创建和使用方法 创建表时定义由一个属性组成…

【蓝桥杯选拔赛真题38】C++判断数字 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C判断数字 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C判断数字 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 给定一个正整数N(100≤N<100000)…

特殊内齿轮加工的另一种选择

内齿轮加工普遍采用插齿或拉削&#xff0c;但对于一些特殊齿廓的内齿轮来说&#xff0c;插齿可能会有一定的困难&#xff0c;或者成本较高。在这种情况下&#xff0c;线切割加工不失为一种不错的选择。那么什么样的零件需要选择这种加工方式呢&#xff1f;一起来看看&#xff1…

【Java】常用类和基础API

文章目录 一、String的特性二、String的内存结构2.1 拼接2.2 new 三、String的常用API-13.1 构造器 四、String的常用API-24.1 常用方法4.2 查找4.3 字符串截取4.4 和字符/字符数组相关4.5 开头与结尾4.6 替换 五、StringBuffer、StringBuilder5.1 StringBuilder、StringBuffer…