JavaSE集合整理

Collection (包含List Set Queue)

Collection继承树 (黑色阴影代表常用)

在这里插入图片描述


  • List

元素有放入顺序,元素可重复 (和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变)

  • ArrayList
    底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素

可扩展数组的形式 初始大小10,扩容增量:原容量的0.5 倍+1(如 ArrayList的容量为10,一次扩容后是容量为16) 查询快

  • LinkedList
    底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素

初始大小10,以2倍的大小扩展 (单项链表的形式) 增删快

  • Vector (子接口stack)
    底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素

为什么线程安全?
因为其底层方法加了锁,synchronized同步锁。

初始大小10,扩容增量:原容量的 1倍 如 Vector的容量为10,一次扩容后是容量为20 增删快


  • Set

元素无放入顺序,元素不可重复,重复元素会覆盖掉
查询元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变

为什么Set是唯一的?
1.不可重复的原因是,底层索引的储存方式是通过还是hash表储存,确保元素的唯一性
2. 存储过程:
先通过hash()算法函数生成一个Int类型hashCode散列值的,与所有hashCode比较
相同-》使用equals在进行比较,equals判断(相同不可插入,不相同直接插入)。
不相同-》直接插入)

初始大小16,加载因子是0.75(指的是插入的数据到达总容量的75%的时候开始扩展。扩容增量:原容量的 1 倍 如 HashSet的容量为16,一次扩容后是容量为32)

  • HashSet
    仅接收一次,不可重复,并做内部排序。使用hash表(数组)存储元素

  • LinkedHashSet
    底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高。

  • TreeSet
    底层数据结构采用二叉树来实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。

TreeSet依据什么确定自身的唯一性,有序性? 根据构造方法不同,分为自然排序(无参构造)和比较器排序(有参构造)。
自然排序: 要求元素必须实现Compareable接口,并重写里面的compareTo()方法,元素通过比较返回的int值来判断排序序列,返回0说明两个对象相同,不需要存储;
比较器排序: 需要在TreeSet初始化是时候传入一个实现Comparator接口的比较器对象,或者采用匿名内部类的方式new一个Comparator对象,重写里面的compare()方法;


Queue (基本不使用)

有序,可重复 已经不太适用。


List和Set的区别图解

在这里插入图片描述


Map

为什么Map的key是唯一的? 因为它底层实现了set的方法?
(不可重复的原因是,底层索引的储存方式是通过还是hash表储存,确保元素的唯一性,
存储过程:先通过hash()算法函数生成一个int类型hashCode散列值的,与所有hashCode比较
相同-》使用equals在进行比较,equals判断(相同不可插入,不相同直接插入)。 不相同-》直接插入 ),

初始大小16,加载因子是0.75(指的是插入的数据到达总容量的75%的时候开始扩展。扩容增量:原容量的 1 倍 如> HashSet的容量为16,一次扩容后是容量为32)

Map继承树
在这里插入图片描述

  • HashMap
    底层数据结构是哈希表,线程不安全,效率高
    HashMap集合是Map接口的一个实现类,它是线程不安全的,用于存储键值映射关系,但保证不能出现相同的键。如果有相同的键,总结一句话:键相同,值覆盖

  • Hashtable
    底层数据结构是哈希表,线程安全,效率低

  • TreeMap
    基于红黑二叉树的Map接口实现

a) 自然排序,无参构造方法(元素具备比较性)  
i.按照compareTo()方法排序,让需要比较的元素对象所属的类实现自然排序接口Comparable,并重写compareTo()方法 
b) 比较器排序,构造方法public TreeSet(Comparator comparator)(集合具备比较性)  
i.让集合的构造方法接收一个比较器接口的子类对象(compareator)
(此处的Comparator为接口,需要写一个接口实现类,在实现类中重写compare()方法,并在这里创建接口实现类的对象,可以用匿名内部类来实现)

  • LinkedHashMap
    是Map接口的哈希表和链表列表实现,具有可预知的迭代顺序

集合的遍历
按条件删除删除注意点
最好使用iterator遍历,使用iterator内部的删除方法

Collections:

Iterator<String> it = list.iterator();
	while(it.hasNext()){
        String x = it.next();    
        while(it.hasnext()){
        if(x.equals("del")){
            it.remove();
        }
}

Map:

Iterator<String> it = list.iterator();
	while(it.hasNext()){
        String x = it.next();    
        while(it.hasnext()){
        if(x.equals("del")){
            it.remove();
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值