集合总结和一些方法

Collection集合特点

 

List系列集合 : 添加的元素是有序的, 可重复, 有索引

ArrayList   LinkdList  有序,可重复,有索引

 

Set系列集合 : 添加的元素是无序, 不重复, 无索引

HshSet : 无序, 不重复, 无索引 ; LinkedHashSet : 有序 , 不重复, 无索引

TreeSet : 按照大小默认升序排序 , 不重复 , 无索引

 

需要注意 : 集合支持泛型 , 集合和泛型不支持基本类型 , 只支持引用数据类型

 

HashSet 原理解读

  1. 创建一个默认长度16 的数组 , 数组名叫table
  2. 根据元素的哈希值 跟数组的长度求余 计算出应存入的位置( 哈希算法 )
  3. 判断当前位置是否为null , 如果是null 直接存入
  4. 如果位置不为 null , 表示有元素 , 则调用equals一 一方法比较
  5. 如果一样 就挂在老元素下面
  6. ( 当一个链表超过8个则转化为红黑树 )

注意: 当数组存满到 16 * 0.75 = 12 ,就自动扩容, 每次扩容到原先的两倍

 

结论 : 通过希望Set集合认为 2 个内容一样的对象就是重复的所以我们要重写对象的

HashScode() equalse() 方法

 

 

LinkedHashSet 原理 基本上跟HashSet 一致 , 知识底层数据每个元素又额外多了一个双量表的机制 记录存储的顺序(每一个)

 

 

TreeSet集合 概述和特点

不重复 , 无索引 , 可排序

这里的可排序 :   对于数值类型 :  Integer , Double , 官方默认按照大小进行升序排序

对于字符串类型:  默认按照首字符的编号进行升序 排序

( 如果 想要使用TreeSet存储自定义类型, 需要指定排序规则 )

不懂就看黑马Java基础 134

 

 

 

 

 

 

 

 

 

 

  1. 如果希望元素可以充分, 又有索引, 索引查询要快? ArrayList集合, 基于数组的
  2. 如果希望元素可以重复 , 又有索引, 增删首位操作快? LinkedList集合 ,基于链表
  3. 如果希望增删改查都快 , 但元素不重复, 无序 , 无索引? HashSet , 基于哈希表的
  4. 如果希望增删改查都快 , 但匀速不重复, 有序, 无索引? LinkedHashSet 基于哈希表双向链表
  5. 如果要对对象进行排序? TreeSet

 

 

Map 集合特点

  1. Map集合的特点都是由键决定大哥
  2. Map集合的见是无序, 不重复的, 无索引的,值不做要求(可以重复)
  3. 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中取

 

 

posted on 2022-03-24 11:18  我要当程序源  阅读(87)  评论(0)    收藏  举报

导航