java --集合基础的总结
集合的整体框架:
一、集合的框架
- 1. 集合、数组都是对多个数据进行存储操作的结构,简称Java容器。
-
说明;此时的存储,主要是指能存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中)。
- 2.1 数组的特点:
-
一旦初始化以后,它的长度就确定了;
-
数组一旦定义好,它的数据类型也就确定了。我们就只能操作指定类型的数据了;
-
比如:String[] arr;int[] str。
- 2.2 数组在存储多个数据方面的劣势:
-
一旦初始化以后,其长度就不可修改;
-
数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便,同时效率不高;
-
获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用;
-
数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足。
因为图可能会有点复杂,我手写了一个集合的框架图,这样看起来会更加明了一些:
List接口和Set接口都是Collection的子接口,在开发中一般多使用List的子接口ArrayList()来进行开发使用,但是也会考虑到特殊的场景使用LinkedList,这就需要从源码的层面去解释说明了,下面是关于Collection接口的和List接口的一些常用的方法介绍,以及底层源码的分析:
Collection接口中常用的方法:
添加:
add(Object obj) —>添加元素到集合中
addAll(Collection coll) —>将coll集合中的所有元素添加到当前的集合中
获取有效元素的个数
int size()
清空集合
void clear()
是否是空集合
boolean isEmpty()
是否包含某个元素
boolean contains(Object obj):是通过元素的equals方法来判断是否是同一个对象
boolean containsAll(Collection c):也是调用元素的equals方法来比较的。拿两个集合的元素挨个比较。
删除
boolean remove(Object obj) :通过元素的equals方法判断是否是要删除的那个元素。只会删除找到的第一个元素
boolean removeAll(Collection coll):取当前集合的差集
取两个集合的交集
boolean retainAll(Collection c):把交集的结果存在当前集合中,不影响c
集合是否相等
boolean equals(Object obj)
转成对象数组
Object[ ] toArray()
获取集合对象的哈希值
hashCode()
遍历
iterator():返回迭代器对象,用于集合遍历
这里要注意: 在往list中添加数据的时候,其所有的类一定要重写equals()方法。在开发中这点很重要。
以上的14中方法是在开发中常用的方法,可以具体先了解大概,到开发中遇到不懂的可以返回来看API进行巩固
一、List接口的框架:
list接口中常用的方法:
关于List()接口中以上的方法必须熟练掌握,其中使用的方法是经常要使用的方法。
集合在存储数据的时候为何不用考虑大小,其中最重要的原因就是在源码中的设置,下面是我通过对源码的分析进行总结:
从源码中可以看出(以JDK8为例):在集合初始化的时候,就创建了一个{ },但是并没有声明其长度,这就是跟JDK7截然不同的地方,但是在数据添加的时候,就会初始化一个长度为10的数组,一直添加直到数组的容量不够,这个时候就需进行扩容,扩大到原来数组的1.5倍,源码在扩容中有一些小的细节点:如果扩容到原来的1.5倍,还是放不下元素,那么就把元素的长度作为数组的长度,从扩容来看,这样去判断并不断的扩容,在开发的过程中,运行效率极其的低,所以我们一般在开发中使用带参的构造器:ArrayList list = new ArrayList(int capacity); 减少扩容,提高项目开发的效率。
在Collection中所有的方法中,其中比较重要的是数组的遍历,这里是Collection独有的一种方式
遍历Collection有三种方式可以进行遍历:
- 使用iterator()迭代器进行遍历,这是最好用的一种,也是必须掌握的一种;
- foreach(),也就是对for()循环的改进,增强for循环,使用起来更加的简单快捷;
- 普通的for循环,也是最基本的写法了
下面就通过代码来进行三种方式的实现:
//方式一:使用iterator()迭代器进行遍历:@Testpublic void test1() {Collection coll = new ArrayList();coll.add("AA");coll.add(550);coll.add(new String("tom"));coll.add(new Person("tom", 25));Iterator iterator = coll.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}
//方式二:使用增强for循环来进行遍历
@Test
//集合的增强for循环的使用public void test1() {Collection coll = new ArrayList();coll.add("AA");coll.add(550);coll.add(new String("tom"));coll.add(new Person("tom", 25));//for(集合元素的类型 局部变量 :集合对象)//内部仍然使用了迭代器for (Object obj : coll) {System.out.println(obj);}}@Test//对数组进行遍历:public void test2(){//for(数组元素的类型 局部变量 :数组对象)int [] arr = new int[]{1,22,66,99,8888};for (int i :arr) {System.out.println(i);}}
普通for循环就很简单了,这里就不写代码去演示了。
二、Set接口的框架:
HashSet和LinkedHashSet、TreeSet都作为Set的子接口,但是LinkedHashSet和TreeSet在开发当中,由于局限性,不会被经常的使用,也是在特殊的场景下才能被使用几次。所以这里主要去理解HashSet这个子接口。
Set接口中没有定义新的方法,使用的都是Collection()中声明的方法,所以这里就没有新的方法了。
但是这里要强调的是:向set中添加的数据,其所在的类一定要重写hashCode()和equals()方法
-
要求:重写的hashCode()和equals()方法尽可能的保持一致:相等的对象必须具有相等的散列码
-
重写两个方法的小技巧:对象中用作equals()方法比较的Field(),都应该用来计算hashCode()
Set()的底层源码不是那么的重要,因为Set()底层是Map,所以这里可以简单介绍下底层源码:
从上面的总结中可以清楚的明白和了解Set接口底层源码存储数据的整个具体过程。
从源码中我们主要是要深入剖析理解Set接口存储的无序性和不可重复性:
无序性:Set接口中的无序性不是随机性,因为存储的数据在底层的数组中并非按照数组的索引的顺序添加,而是使用HashCode()计算出每一个添加元素的哈希值,然后通过某种特殊的算法求出在数组中存储的位置。
不可重复性是指:保证添加的元素按照equals()判断时,不能返回true:即:不能添加两个相同的元素
关于TreeSet接口,主要去理解两点:
- 向TreeSet中添加数据,必须类型一致,否则就会报错;
- 两种排序的方式:自然排序 和 定制排序
第二点可以通过代码来演示一下自然排序和定制排序:
因为定制排序和自然排序使用了User,所以,下面代码是自然排序实现Comparable接口重写了compareTo方法:
public class User implements Comparable{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public User() {}public User(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;User user = (User) o;if (age != user.age) return false;return name != null ? name.equals(user.name) : user.name == null;}@Overridepublic int hashCode() {int result = name != null ? name.hashCode() : 0;result = 31 * result + age;return result;}@Override//自然排序的方法重写,compareTo()//要求按照姓名从大到小排列,年龄从小到大public int compareTo(Object o) {if (o instanceof User){User user = (User) o;
// return -this.name.compareTo(user.name);int compare = -this.name.compareTo(user.name);if (compare != 0){return compare;}else{return Integer.compare(this.age,user.age);}}else {throw new RuntimeException("输入的类型不匹配");}}
}
自然排序测试:
@Testpublic void test2() {TreeSet set = new TreeSet();set.add(new User("Tom", 56));set.add(new User("Lisa", 5));set.add(new User("Jerry", 69));set.add(new User("Blink", 22));set.add(new User("Softer", 18));set.add(new User("Ala", 20));set.add(new User("Ala", 18));Iterator iterator = set.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}
代码运行结果:
从中可以看出是按照姓名从大到小排列,年龄从小到大排列的顺序。
定制排序测试:
@Testpublic void test3() {Comparator com = new Comparator() {//按照年龄从小到大@Overridepublic int compare(Object o1, Object o2) {if (o1 instanceof User && o2 instanceof User) {User g1 = (User) o1;User g2 = (User) o2;return Integer.compare(g1.getAge(), g2.getAge());} else {throw new RuntimeException("插入的类型不一致");}}};TreeSet set = new TreeSet(com);//定制排序的参数放入其中就按照定制排序的方式进行排序set.add(new User("Tom", 56));set.add(new User("Lisa", 5));set.add(new User("Jerry", 69));set.add(new User("Blink", 22));set.add(new User("Softer", 18));set.add(new User("Ala", 20));set.add(new User("Ala", 18));Iterator iterator = set.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
代码运行结果:
可以看出是按照年龄的从小到大排序的
到这里Collertion接口以及其所有的子接口都介绍完毕,主要去理解List的子接口ArrayList接口方法的使用和底层源码的过程是如何实现的。
**
三、Map接口的框架:
Map接口中常用的方法:
添加、删除、修改操作:
-
Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中
-
void putAll(Map m):将m中的所有key-value对存放到当前map中
-
Object remove(Object key):移除指定key的key-value对,并返回value
-
void clear():清空当前map中的所有数据
-
元素查询的操作:
-
Object get(Object key):获取指定key对应的value
-
boolean containsKey(Object key):是否包含指定的key
-
boolean containsValue(Object value):是否包含指定的value
-
int size():返回map中key-value对的个数
-
boolean isEmpty():判断当前map是否为空
-
boolean equals(Object obj):判断当前map和参数对象obj是否相等
-
元视图操作的方法:
-
Set keySet():返回所有key构成的Set集合
-
Collection values():返回所有value构成的Collection集合
-
Set entrySet():返回所有key-value对构成的Set集合
- 总结:
-
添加: Object put(Object key,Object value)
-
删除:remove(Object key)/clear()
-
修改: Object put(Object key,Object value)
-
查询:get()
-
长度:size()
-
遍历:KeySet()\values()\enTrySet()
这里主要是数组的遍历,因为iterator只能使用在Collection接口中,所以Map接口的遍历需要转换成Set或者Collection接口再能使用iterator实现遍历操作。Map接口有三种方式:KeySet()返回所有key构成的Set集合,values()返回所有value构成的Collection集合,enTrySet()返回所有key-value对构成的Set集合。
代码如下:
public void test3(){HashMap map1 = new HashMap();map1.put(11,"dandan");map1.put(356,"aoao");map1.put(44,"zhangsan");map1.put(255,"lisai");//keySet();Set set = map1.keySet();Iterator iterator = set.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}//values()Collection values = map1.values();Iterator iterator1 = values.iterator();while (iterator1.hasNext()){System.out.println(iterator1.next());}//enTrySet//方式一Set set1 = map1.entrySet();Iterator iterator2 = set1.iterator();while (iterator2.hasNext()){Object obj = iterator2.next();Map.Entry entry = (Map.Entry) obj;//enTrySet集合中的元素都是entrySystem.out.println(entry.getKey() + "----->" + entry.getValue());}System.out.println("*********************");//方式二:Set set2 = map1.keySet();Iterator iterator3 = set2.iterator();while (iterator3.hasNext()){Object key = iterator3.next();Object value = map1.get(key);System.out.println(key + "-------//-------" + value);}}
对HashMap的理解:这里的小知识点的总结有助于一会底层源码分析的理解
- 1.Map结构中的key:无序的,不可重复的,使用set存储所有的key ---->key所有类要重写equals()方法和 HashCode(),(以HashMap为例)
- 2.Map中的Value():无序的,可重复的,使用Collection() ---->value所在的类要重写equals()方法。
- 3.一个键值对:key-value构成了一个Entry对象
- 4.Map中的Entry:无序的,不可重复的,也是使用Set()存储所有的Entry
下面是底层HashMap以及LinkedHashMap(简单了解即可)的理解:
从底层的源码可以看出HashMap主要是由数组 + 链表 + 红黑树,与Set的底层源码如出一辙,更可以印证Set接口的底层就是HashMap,只不过是在Set的基础上,增加了红黑树,还有在重写equals方法时的添加过程有所不同,其余部分完全一致。这里面涉及到了红黑树,是数据结构中的二叉排序树,感兴趣的可以了解一下,这里就不具体的细说了。
TreeMap接口跟TreeSet接口的使用完全一致。
- 1.输入的key关键字类型必须一致,因为排序是按照key关键字进行的排序;
- 2.排序的方式:自然排序、定制排序
自然排序:
public class Student implements Comparable{private String name;private int age;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Student(String name, int age) {this.name = name;this.age = age;}public Student() {}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;if (age != student.age) return false;return name != null ? name.equals(student.name) : student.name == null;}@Overridepublic int hashCode() {int result = name != null ? name.hashCode() : 0;result = 31 * result + age;return result;}@Override//要求按照姓名从大到小排列,年龄从小到大public int compareTo(Object o) {if (o instanceof Student){Student student = (Student) o;int compare = -this.getName().compareTo(student.getName());if (compare!=0){return compare;}else {return Integer.compare(this.getAge(),student.getAge());}}throw new RuntimeException("输入的类型不一致");}
自然排序的测试:
@Test//自然排序public void test1(){TreeMap map = new TreeMap();Student s1 =new Student("Tom",22);Student s2 =new Student("Jerry",32);Student s3 =new Student("Lisa",19);Student s4 =new Student("Rose",24);map.put(s1,98);map.put(s2,63);map.put(s3,78);map.put(s4,100);Set set = map.entrySet();Iterator iterator = set.iterator();while (iterator.hasNext()){Object obj = iterator.next();Map.Entry entry = (Map.Entry) obj;System.out.println(entry.getKey() + "------>" + entry.getValue());}
代码运行结果:
定制排序:
@Testpublic void test2(){TreeMap map = new TreeMap(new Comparator() {@Overridepublic int compare(Object o1, Object o2) {if (o1 instanceof Student && o2 instanceof Student){Student s1 = (Student) o1;Student s2 = (Student) o2;return Integer.compare(s1.getAge(),s2.getAge());}throw new RuntimeException("输入的类型不一致");}});Student s1 =new Student("Tom",22);Student s2 =new Student("Jerry",32);Student s3 =new Student("Lisa",19);Student s4 =new Student("Rose",24);map.put(s1,98);map.put(s2,63);map.put(s3,78);map.put(s4,100);Set set = map.entrySet();Iterator iterator = set.iterator();while (iterator.hasNext()){Object obj = iterator.next();Map.Entry entry = (Map.Entry) obj;System.out.println(entry.getKey() + "------>" + entry.getValue());}}
代码运行结果:
Map接口开发的过程中经常使用的也就是HashMap接口,所以这个接口需要去深入的了解一下其使用的方法和底层的源码分析。
Collections工具类的使用:
Collections:是操作Collection、Map的工具类,不同于Collection接口,两者之间不要混淆了。
Collections中常用的方法:
- reverse(List):反转 List 中元素的顺序
- shuffle(List):对 List 集合元素进行随机排序
- sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
- sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
- swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换
- Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
- Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素
- Object min(Collection)
- Object min(Collection,Comparator)
- int frequency(Collection,Object):返回指定集合中指定元素的出现次数
- void copy(List dest,List src):将src中的内容复制到dest中
- boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值
这里要注意一下copy操作:
如果在使用copy操作的时候,没有初始化dest的长度,是会报IndexOutOfBoundsException(“Source does not fit in dest”)异常的。
所以以下是开发中最常用声明dest长度的方式:
@Testpublic void test2(){List list = new ArrayList();list.add(123);list.add(23);list.add(424);list.add(-82);list.add(-82);List desc = Arrays.asList(new Object[list.size()]);Collections.copy(desc,list);System.out.println(desc);
这样所有集合的基础部分就都在上面了,补充一点,因为ArrayList接口和HashMap接口是不安全的线程那么就可以使用synchronizedList和synchronizedMap来创建多线程进行操作,就会使得线程安全了。
最后希望大家可以看的满足,学的快乐!!!我是小白,但我很努力,加油!!
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Java序列化InvalidClassException异常原理和解决方案
当JVM反序列化对象时,能找到class文件,但是class文件在序列化对象之后发生了修改,那么反序列化操作也会失败,抛出一个InvalidClassException异常。发生这个异常的原因如下:该类的序列版本号与从流中读取的类描述符的版本号不匹配 该类包含未知数据类型 该类没有可访问的无…...
2024/5/9 22:25:58 - 块级元素与行内元素与行内块级元素的特点
块级元素:1.独占一行2.可以设置高度、宽度,外边距、内边距3.宽度默认是父级的100%4.里边可以放行内或者块级元素注意:文字类的元素(p标签、h1~h6标签)内不能使用块级元素行内元素:1.相邻行内元素都在一行上2.不可以设置高度、宽度,外边距、内边距3.宽度是它本身内容的宽…...
2024/4/23 4:49:33 - Linux使用小结-Yuanjrah(2)
1.pip命令#以更新方式安装xxx.txt文件里的所有文件,已有的不再下载 pip install --upgrade -r xxx.txt #保存文件到根目录 git clone https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu.git #执行xxx文件 bash xxx.sh2.解压压缩文件2.1 zip命令zip -r mysql.zip mysql 该句命…...
2024/4/23 17:42:27 - 一文图解弄懂八大常用算法思想!
文章首发:微信搜索『业余码农』算法和数据结构一直以来都是程序员的基本内功,可以说没有数据结构的基础建设和算法加持,也就没有这将近八十年的信息革命时代。数据结构可以看作是算法实现的容器,通过一系列特殊结构的数据集合,能够将算法更为高效而可靠的执行起来。 算法的…...
2024/4/23 15:11:04 - 1.数组
一、数组的定义引用数据类型,数组的地址连续,一旦创建长度固定,数组的地址是第一个元素的地址动态初始化 数组类型 数组名 = 数组[长度] int[] arr = new int[5]; arr[0]=1;静态初始化 数组类型 数组名 = {} int[] arr = {1,2,3,4};二、数组存储引用数据类型package BAS…...
2024/5/2 22:41:23 - Windows10 安装 Oracle 19c 文档
下载安装包Oracle软件下载,建议通过官网免费下载,但是需要注册。下载地址: https://www.oracle.com/database/technologies/oracle19c-windows-downloads.html通过下载页面可以选择安装压缩包(WINDOWS.X64_193000_db_home.zip )。如果嫌注册麻烦,提供百度云下载链接:htt…...
2024/5/1 1:44:44 - 大流量电商系统JVM调优案例
一、大流量电商系统模型二、JVM参数设置和JVM内存模型 1、JVM参数设置 -Xms 3072M -Xmx3072M -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M 2、JVM内存模型内存模型图说明 内存大小设置为3G,默认老年代和年轻代的大小为2:1; 所以old区域=2G,年轻代区域=1G; 年…...
2024/4/22 7:37:29 - 刷题记录
刷题记录 剑指offer 二叉搜索树第k个结点 先遍历左子树不存在遍历自己再遍历右子树 数据流中的中位数 制造一个大根堆和一个小根堆,当前为偶数时向小根堆里插入并从小根堆提一个到大根堆,奇数则相反,当前偶数则为大根堆的顶部元素,奇数为大根和小根的顶部元素平均值 滑动窗口最…...
2024/4/10 15:42:24 - redis再战之IO网络传输演变与区别《二》
文章目录BIO、NIO、Epoll发展历程以及原理回顾BIO原理与缺陷NIO的原理与缺陷同步非阻塞NIO 到 多路复用NIO多路复用NIO 到 epollselect poll和epoll的区别select的几大缺点:poll实现epoll总结: BIO、NIO、Epoll发展历程以及原理回顾 BIO原理与缺陷Linux有OS内核,内核会有很多…...
2024/5/6 14:56:09 - 指针基础(一)
指针基础一“软释放”问题:实例指针执行区域修改问题:实例方案一:直接修改方案二:如果指针在结构或者类中 从最近开始,博主逐步向着一个程序员的方向发展,而不仅仅是个学生。所以我会对在编程过程中学到的知识点进行总结,以帮助记忆,如果对知识点有什么问题欢迎评论。 …...
2024/5/9 16:06:34 - leetcode(剑指offer12)-矩阵中的路径(递归和回溯法不懂)
?为什么word为空时下标溢出呢 class Solution:def exist(self, board: List[List[str]], word: str) -> bool:if not board or not word:return Falsedef dfs(i,j ,k):if not 0 <= i < len(board) or not 0 <= j < len(board[0]) or board[i][j] != word[k]:re…...
2024/4/24 0:50:59 - cmd终端创建一个MySQL数据库
运行mysql -u root -p 输入密码 CREATE DATABASE first_test 注意分号回车,创建完成...
2024/4/26 6:29:59 - requset转发和response重定向的区别
response: response是服务器对客户端的反馈,其对页面重定向的流程是:当客户端向服务器发起请求时,服务器重新给客户端一个URL地址,让客户端重新发起一个新的请求,在这个过程中,客户端第一次请求所携带的头信息将消失,在重定向之后而且地址栏显示的是重定向的页面,这是一…...
2024/4/27 10:47:08 - HTTP以及Request的获取
HTTP概念: HTTP HyperText Transfer Protocol 超文本传输协议、传输协议:定义了,客户端和服务器端通信时,发送数据的格式 特点:基于TCP/IP的高级协议 默认端口号:80 基于请求/响应模型的:一次请求对应一次响应 无状态的:每次请求之间相互独立,不能交互数据历史版本:1.…...
2024/4/24 19:43:53 - Kali SQL注入--基于SQLi-Labs
Kali SQL注入--基于SQLi-LabsSQLi-LabsSQL注入SQL注入的基本原理SQL注入初步实验一个结束语 SQLi-Labs SQLi-Labs是一个练习和理解SQL注入的非常合适的靶站平台,总共有75关,这里我选择它做我的实验环境来对结果进行展示。 SQL注入 SQL注入的基本原理 首先,这不是一篇极为完整…...
2024/4/25 14:20:59 - 696. 计数二进制子串
1.题目描述 给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。 重复出现的子串要计算它们出现的次数。 示例 1 :示例 2 :注意: 1.s.length 在1到50,000之间。 2.s 只包含“0”或“1”字符。 2.思路 pre…...
2024/4/15 10:12:56 - 数论 + 贪心 - Harder Gcd Problem - 2020牛客暑期多校训练营(第四场)+ Jzzhu and Apples - CF 449C
数论 + 贪心 - Harder Gcd Problem - 2020牛客暑期多校训练营(第四场)+ Jzzhu and Apples - CF 449C 题意: T组测试数据,T组测试数据,T组测试数据, 每组包括一个整数n,每组包括一个整数n,每组包括一个整数n, 要求从1到n的排列:要求从1到n的排列:要求从1到n的排列:{…...
2024/5/5 12:39:40 - 前端——使用JQuery 实现点击加入购物车(二)
实现效果:1. 鼠标的移入与移出: 当鼠标放到购物车上时,购物车向左移动,并展示购物车中的商品2. 删除键:点击删除,可以在购物车中删除这个商品项3. 加:点击加,购物车中该商品数量增加14. 减:点击减,购物车中该商品数量减少1,并且当减到1的时候,提示不能再减一、鼠标…...
2024/4/27 20:31:05 - QT创建图标(Windows环境下)
一、 生成.ico文件,如myico.ico, 网上相关的网站很多,如http://www.bitbug.net/二、 QT加载ico文件有两种方式1.先在项目文件夹中生成.rc文件,如myico.rc,再在此.rc文件中写入 IDI_ICON1 ICON DISCARDABLE "myico.ico"然后再.pro文件中写入 RC_FILE += myico.rc…...
2024/5/6 0:00:46 - RecyclerView复用与回收源码分析
我们知道RecyclerView 在滑动到一定数量之后回进行视图复用,那RecyclerView 是如何做到复用和回收的呢?首先我们在分析源码的时候得清楚我们要以什么目的去分析源码,像RecyclerView 复用的话,既然它是在滑动的时候复用的呢,那我们猜想它是不是就是在走滑动事件的时候去做的…...
2024/4/28 22:16:04
最新文章
- 这 7 道 Redis 基础问题,很常见!!
后端项目如果用到分布式缓存的话,一般用的都是 Redis。不过,Redis 不仅仅能做缓存,还能用作分布式锁、延时队列、限流等等。 什么是 Redis? Redis[1] (REmote DIctionary Server)是一个基于 C 语言开发的…...
2024/5/10 3:51:23 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/9 21:23:04 - 产品推荐 | 中科亿海微推出亿迅®A8000金融FPGA加速卡
01、产品概述 亿迅A8000金融加速卡,是中科亿海微联合金融证券领域的战略合作伙伴北京睿智融科,将可编程逻辑芯片与金融行业深度结合,通过可编程逻辑芯片对交易行情加速解码,实现低至纳秒级的解码引擎,端到端的处理时延…...
2024/5/9 3:34:56 - ArcGIS10.8保姆式安装教程
ArcGIS 10.8是一款非常强大的地理信息系统软件,用于创建、管理、分析和可视化地理数据。以下是ArcGIS 10.8的详细安装教程: 确保系统满足安装要求 在开始安装之前,请确保您的计算机满足以下系统要求: 操作系统:Windo…...
2024/5/9 19:04:32 - 416. 分割等和子集问题(动态规划)
题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满ÿ…...
2024/5/10 1:36:26 - 【Java】ExcelWriter自适应宽度工具类(支持中文)
工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...
2024/5/9 7:40:42 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/5/9 2:44:26 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/5/10 2:07:45 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/5/9 3:15:57 - 【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
2024/5/9 5:40:03 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/5/9 7:40:40 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/5/10 2:07:43 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/5/10 2:07:43 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/5/9 4:12:16 - 用欧拉路径判断图同构推出reverse合法性:1116T4
http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai 和 a i 1 a_{i1} ai1 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然࿰…...
2024/5/9 7:40:35 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/5/9 19:47:07 - Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...
2024/5/9 7:40:34 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/5/10 2:07:41 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/5/9 5:02:59 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/5/9 4:31:45 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/5/9 16:54:42 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/5/10 1:31:37 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/5/9 6:36:49 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/5/9 4:33:29 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57