最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

集合...

互联网 admin 45浏览 0评论

集合...

Collection

 List

 有序的colletion(也称为序列)
此接口的用户可以对列表中的每个元素的插入位置进行精确的控制,
用户可以根据元素的整数索引(在列表中的位置)来访问元素,
并搜索列表中的元素.
元素都有下标
数据是有序的
允许存放重复的元素

 ArrayList

 存在java.util包中
内部是用数组结构存放数据,封装数组的操作,每个对象都有下标
内部数组默认的初始容量是10,如果不够会以1.5倍的容量增长
查询快,增删数据效率会低 适合查询较多的场景


LinkedList 

链表,两端效率高,底层就是链表实现的
查询慢 增删快 适合增删操作较多的场景
LinkedList 查询慢是指数据量大时 查询中间要慢 首位操作还是比较快的

 Set

Set是一个不包含重复数据的Collection
Set集合中的数据是无序的(因为Set集合没有下标)
Set集合中的元素不可以重复 – 常用来给数据去重
数据无序且数据不允许重复

HashSet 

底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K存入内部的HashMap中,其中K不允许重复,允许使用null.
如果set中存放的是我们自定义的类型
需要给自定义类中添加重写的equals()与hashCode(),才会去重
不然会认为s2和s3的地址值不同,是两个不同的对象,不会去重 

 TreeSet

 底层是TreeMap,也是红黑树的形式,便于查找数据

 Map

 Java.util接口Map<K,V>
类型参数 : K - 表示此映射所维护的键 V – 表示此映射所维护的对应的值
也叫做哈希表、散列表. 常用于键值对结构的数据.其中键不能重复,值可以重复
Map可以根据键来提取对应的值
Map的键不允许重复,如果重复,对应的值会被覆盖
Map存放的都是无序的数据
Map的初始容量是16,默认的加载因子是0.75
value可以重复
key不允许重复,如果重复,后面的value会把前面的value覆盖掉

 HashMap

 HashMap的键要同时重写hashCode()和equlas()
hashCode()用来判定二者的hash值是否相同,重写后根据属性生成
equlas()用来判断属性的值是否相同,重写后,根据属性判断
–equlas()判断数据如果相等,hashCode()必须相同
–equlas()判断数据如果不等,hashCode()尽量不同
HashMap的结构是数组+链表 或者 数组+红黑树 的形式
HashMap底层的Entry[ ]数组,初始容量为16,加载因子是0.75f,扩容按约为2倍扩容
当存放数据时,会根据hash(key)%n算法来计算数据的存放位置,n就是数组的长度,其实也就是集合的容量
当计算到的位置之前没有存过数据的时候,会直接存放数据
当计算的位置,有数据时,会发生hash冲突/hash碰撞
解决的办法就是采用链表的结构,在数组中指定位置处以后元素之后插入新的元素
也就是说数组中的元素都是最早加入的节点
如果链表的长度>8且数组长度>64时,链表会转为红黑树,当链表的长度<6时,红黑树会重新恢复成链表
默认的加载因子是0.75,也就是说存到75%开始扩容,按照2的次幂进行
扩容到容量的加载因子后,就会重新开辟空间,重新计算所有对象的存储位置,也叫做rehash
设置初始容量与加载因子要讲求相对平衡,如果加载因子过低,则rehash过于频繁,影响性能
如果初始容量设置太高或者加载因子设置太高,影响查询效率

 TreeMap

集合...

Collection

 List

 有序的colletion(也称为序列)
此接口的用户可以对列表中的每个元素的插入位置进行精确的控制,
用户可以根据元素的整数索引(在列表中的位置)来访问元素,
并搜索列表中的元素.
元素都有下标
数据是有序的
允许存放重复的元素

 ArrayList

 存在java.util包中
内部是用数组结构存放数据,封装数组的操作,每个对象都有下标
内部数组默认的初始容量是10,如果不够会以1.5倍的容量增长
查询快,增删数据效率会低 适合查询较多的场景


LinkedList 

链表,两端效率高,底层就是链表实现的
查询慢 增删快 适合增删操作较多的场景
LinkedList 查询慢是指数据量大时 查询中间要慢 首位操作还是比较快的

 Set

Set是一个不包含重复数据的Collection
Set集合中的数据是无序的(因为Set集合没有下标)
Set集合中的元素不可以重复 – 常用来给数据去重
数据无序且数据不允许重复

HashSet 

底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K存入内部的HashMap中,其中K不允许重复,允许使用null.
如果set中存放的是我们自定义的类型
需要给自定义类中添加重写的equals()与hashCode(),才会去重
不然会认为s2和s3的地址值不同,是两个不同的对象,不会去重 

 TreeSet

 底层是TreeMap,也是红黑树的形式,便于查找数据

 Map

 Java.util接口Map<K,V>
类型参数 : K - 表示此映射所维护的键 V – 表示此映射所维护的对应的值
也叫做哈希表、散列表. 常用于键值对结构的数据.其中键不能重复,值可以重复
Map可以根据键来提取对应的值
Map的键不允许重复,如果重复,对应的值会被覆盖
Map存放的都是无序的数据
Map的初始容量是16,默认的加载因子是0.75
value可以重复
key不允许重复,如果重复,后面的value会把前面的value覆盖掉

 HashMap

 HashMap的键要同时重写hashCode()和equlas()
hashCode()用来判定二者的hash值是否相同,重写后根据属性生成
equlas()用来判断属性的值是否相同,重写后,根据属性判断
–equlas()判断数据如果相等,hashCode()必须相同
–equlas()判断数据如果不等,hashCode()尽量不同
HashMap的结构是数组+链表 或者 数组+红黑树 的形式
HashMap底层的Entry[ ]数组,初始容量为16,加载因子是0.75f,扩容按约为2倍扩容
当存放数据时,会根据hash(key)%n算法来计算数据的存放位置,n就是数组的长度,其实也就是集合的容量
当计算到的位置之前没有存过数据的时候,会直接存放数据
当计算的位置,有数据时,会发生hash冲突/hash碰撞
解决的办法就是采用链表的结构,在数组中指定位置处以后元素之后插入新的元素
也就是说数组中的元素都是最早加入的节点
如果链表的长度>8且数组长度>64时,链表会转为红黑树,当链表的长度<6时,红黑树会重新恢复成链表
默认的加载因子是0.75,也就是说存到75%开始扩容,按照2的次幂进行
扩容到容量的加载因子后,就会重新开辟空间,重新计算所有对象的存储位置,也叫做rehash
设置初始容量与加载因子要讲求相对平衡,如果加载因子过低,则rehash过于频繁,影响性能
如果初始容量设置太高或者加载因子设置太高,影响查询效率

 TreeMap

发布评论

评论列表 (0)

  1. 暂无评论