list、set、map区别
2023-03-17 本文已影响0人
我要离开浪浪山
一、前言:
list 、set、 map区别:意思不同、用途不同。
1、意思不同
结构图.png
- List:有序、可重复。
- Set:无序、不可重复的集合。重复元素会覆盖掉。
- Map:键值对,键唯一、值不唯一。Map 集合中存储的是键值对,键不能重复,值可以重复。
2、用途不同
- List 集合中对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。
- Map中的每一个元素包含一个键和一个值,成对出现,键对象不可以重复,值对象可以重复。
cbc31c84a10446ac073d36cdb916ab7.png
- Set 集合中的对象不按照特定的方式排序,并且没有重复对象,但它的实现类能对集合中的对象按照特定的方式排序。
3、ArrayList,LinkedList,HashMap的扩容机制
1、ArrayList底层是数组,初始容量为10,当使用空参构造器创建对象时对象此时的容量并不是10,当使用add给对象赋值操作时
此时的容量为10。当数组要满了就自动扩容为原容量的1.5倍。
2、LinkedList不用扩容,因为它实现了Dqueue和LIst接口,底层是用双向链表实现的,所以它对元素的增加、删除效率要比ArrayList好;
它是一个双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好
3、HashMap的初始容量为16,扩容因子为0.75,扩容为原来容量的两倍。
4、在Java中,Map有4个主要的子类:HashMap、TreeMap、LinkedHashMap和ConcurrentHashMap。
- HashMap:它是最常用的Map实现类之一,它使用哈希表来存储键值对。它不保证元素的顺序,因此在迭代时不能保证顺序。它允许null键和值,但不保证线程安全。
- TreeMap:它是基于红黑树实现的,它可以保证元素按照键的自然顺序排序。它不允许null键,但允许null值。它也不是线程安全的。
- LinkedHashMap:它是HashMap的一个子类,它通过维护一个双向链表来保证元素的顺序。它既可以按照插入顺序迭代,也可以按照访问顺序迭代(即最近访问的元素排在最前面)。它允许null键和值,但不保证线程安全。
- ConcurrentHashMap:它是线程安全的HashMap实现类,它使用分段锁来实现并发访问。它的性能比Hashtable好,并且允许null键和值。它也可以按照插入顺序迭代。