常用集合List、Set、Map的比较

概述:

  • List、Set、Map都是接口,前两个继承至Collection接口,Map为独立接口。
    在这里插入图片描述

List有序,可重复

1.ArrayList

底层:数组;查询快,增删慢。
线程不安全,效率高。
getter()、setter()方法快
当容量不够时,扩展当前容量*1.5+1

注意: 谨慎使用subList方法。
subList返回的是ArrayList的内部类,数据是原ArrayList的视图,改动subList的返回值会对元数据产生变动。
代替方法:

list.stream().skip(strart).limit(end).collect(Collectors.toList());

2.Vector

底层:数组;查询慢,增删慢。
线程安全,效率低。
当容量不够时,默认扩展一倍

3.LinkedList

底层:链表;查询慢,增删快。
线程不安全,效率高。

4.CopyOnWriteArrayList

并发情况下,读场景远远大于写场景的时候使用;
他的写场景会复制一份相同的数组去写,读写互不干扰,所有读更快。

Set无序,唯一性

1.HashSet

底层:哈希表;存取速度快
依赖hashCode()、equals()保证唯一性。

注意:内部的实现原理实际用到的是HashMap;

2.LinkedHashSet

底层:链表和哈希表
元素有序:链表;
唯一性:哈希表。

3.TreeSet

底层:红黑树
元素有序:自然排序、比较器排序
唯一性:根据比较的返回值是否为0。
            HashSet<String> hashSet = new HashSet<>();
            LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
            TreeSet<String> treeSet = new TreeSet<>();

            for (String data : Arrays.asList("1", "2", "4", "-5", "3")) {
                hashSet.add(data);
                linkedHashSet.add(data);
                treeSet.add(data);
            }

            //HashSet不一定有序
            System.out.println("HashSet :" + hashSet);

            //LinkedHashSet按照插入顺序排序(FIFO)
            System.out.println("LinkedHashSet :" + linkedHashSet);

            //Tree内部实现排序
            System.out.println("TreeSet :" + treeSet);

Set中三个实现类是否有序的结果:

HashSet :[1, 2, 3, 4, -5]
LinkedHashSet :[1, 2, 4, -5, 3]
TreeSet :[-5, 1, 2, 3, 4]

Map概述

Map接口有HashMap、TreeMap、HashTable三个实现类

1.HashMap

键不可重复,值可重复,无序
底层:哈希表
线程不安全,效率高
当空间占用比例超过0.75,扩容变为原来的2倍
允许key值为null,value为null

推荐: 在不用考虑线程安全的情况下使用

2.HashTable

键不可重复,值可重复,无序
底层:哈希表
线程安全,效率低,全程sychronized同步锁

3.TreeMap

底层:二叉树,有序的
键不可重复,值可重复

4.ConcurrentHashMap

线程安全且高效的,jdk1.7使用segment分段锁机制,jdk1.8使用cas无锁机制,锁的粒度更细了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值