集合总结和一些方法
Collection集合特点
List系列集合 : 添加的元素是有序的, 可重复, 有索引
ArrayList LinkdList 有序,可重复,有索引
Set系列集合 : 添加的元素是无序, 不重复, 无索引
HshSet : 无序, 不重复, 无索引 ; LinkedHashSet : 有序 , 不重复, 无索引
TreeSet : 按照大小默认升序排序 , 不重复 , 无索引
需要注意 : 集合支持泛型 , 集合和泛型不支持基本类型 , 只支持引用数据类型
HashSet 原理解读
- 创建一个默认长度16 的数组 , 数组名叫table
- 根据元素的哈希值 跟数组的长度求余 计算出应存入的位置( 哈希算法 )
- 判断当前位置是否为null , 如果是null 直接存入
- 如果位置不为 null , 表示有元素 , 则调用equals一 一方法比较
- 如果一样 就挂在老元素下面
- ( 当一个链表超过8个则转化为红黑树 )
注意: 当数组存满到 16 * 0.75 = 12 时 ,就自动扩容, 每次扩容到原先的两倍
结论 : 通过希望Set集合认为 2 个内容一样的对象就是重复的所以我们要重写对象的
HashScode() 和 equalse() 方法
LinkedHashSet 原理 基本上跟HashSet 一致 , 知识底层数据每个元素又额外多了一个双量表的机制 记录存储的顺序(每一个)
TreeSet集合 概述和特点
不重复 , 无索引 , 可排序
这里的可排序 : 对于数值类型 : Integer , Double , 官方默认按照大小进行升序排序
对于字符串类型: 默认按照首字符的编号进行升序 排序
( 如果 想要使用TreeSet存储自定义类型, 需要指定排序规则 )
不懂就看黑马Java基础 134
- 如果希望元素可以充分, 又有索引, 索引查询要快? 用ArrayList集合, 基于数组的
- 如果希望元素可以重复 , 又有索引, 增删首位操作快? 用LinkedList集合 ,基于链表
- 如果希望增删改查都快 , 但元素不重复, 无序 , 无索引? 用 HashSet , 基于哈希表的
- 如果希望增删改查都快 , 但匀速不重复, 有序, 无索引? 用LinkedHashSet 基于哈希表双向链表
- 如果要对对象进行排序? 用TreeSet
Map 集合特点
- Map集合的特点都是由键决定大哥
- Map集合的见是无序, 不重复的, 无索引的,值不做要求(可以重复)
- Map集合后面冲的建对应的值会覆盖前面重复键的值.
Map集合常用API
Put( ) 添加元素
Remove() 根据键删除键值对元素
Clear() 清空
ContainsKey() 判断集合是否包含指定的键
ContainsValue() 判断集合是否包含指定的值
IsEmpty() 判断集合是否为空
Size() 集合长度, 也就是集合中键值对的个数
Collection<V> values = maps.values() //获取全部值的集合
合并其他Map集合
Map<String , Integer> map1 = new HashMap<>();
Map1.put(“java1” , 1);
Map1.put(“java2” , 100);
Map<String , Integer> map2 = new HashMap<>();
Map2.put(“java2” , 1);
Map2.put(“java3” , 100);
Map1.putAll(map2);//把集合map2的元素拷贝到map1中取
浙公网安备 33010602011771号