1. List哪些实现类
Java List一共三个实现类分别是ArrayList、Vector和LinkedList。
(1) ArrayList是最常见用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已有数组的数据复制到新的存储空间中。当ArrayList的中间位置需要插入或删除元素的时候,需要对数组进行移动、赋值,代价比较高。因此他适合随机读和遍历,不适合添加和删除元素。扩容过程:初始大小为空数组,当插入数据后,初始容量为10,当容量不够时会扩容50%,如果扩容后还是不够则直接扩容至所需的最小容量大小,扩容后通过Arrays.copyOf()将原数组复制到新数组。
(2) Vector和ArrayList一样是通过数组实现的,不同的是它支持线程的同步(是通过synchronized实现的,高并发效率低,会采用并发容器处理高并发场景),但实现同步需要很高的花费,因此他的效率比ArrayList差。扩容过程:初始大小为10,当容量不够时会扩容1倍(当在构造函数中设置了指定扩容大小,则扩容指定大小),如果扩容后还是不够则直接扩容至所需的最小容量大小,扩容后通过Arrays.copyOf()将原数组复制到新数组。
(3) LinkedList是用于链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外它还提供了List接口中没有定义的方法,专门用于操作表头和表尾数据,可以当堆栈、队列和双向对列使用。是一种双向链表,无扩扩容问题。
2. Set哪些实现类
Set实现有HashSet、TreeSet、LinkedHashSet
(1) HashSet是无序的、不可重复的。通过对象的hashCode和equals方法保证对象的唯一性。 HashSet内部的存储结构是哈希表,是线程不安全的。通过HashMap的key来实现不重复和无序效果。
(2) TreeSet对元素进行排序,内部是通过TreeMap 实现。
a. 自然排序,元素实现Comparable接口,并覆盖compareTo方法,>1正序,<1倒序, =0只存储当前第一个对象,Integer、String均已实现了该接口,所以可以直接进行排序。
b. 定制排序,newTreeSet时需要传入Comparator实现接口,并覆盖compare方法,>1正序,<1倒序, =0只存储当前第一个对象
(3) LinkedHashSet是一种有序的Set集合,即其元素的存入和输出的顺序是相同的。内部是通过LinkedHashMap实现,继承HashSet,而且LinkedHashMap是一个双链表结构,节点为LinkedHashMap.Entry继承HashMap的Node。。!!!!!!!!!!!!!!!!!!!!!!!!
3. Map有哪些实现类
HashMap
Hash冲突:键(key)经过hash函数得到的结果作为地址去存放当前的键值对(key-value)(hashmap的存值方式),但是却发现该地址已经有值了,就会产生冲突。换句话说就是:如果两个不同对象的hashCode相同,这种现象称为hash冲突。
线程安全:当多线程的情况下,可能产生条件竞争。当重新调整HashMap大小的时候,确实存在条件竞争,如果两个线程都发现HashMap需要重新调整大小了,它们会同时试着调整大小。在调整大小的过程中,存储在链表中的元素的次序会反过来,因为移动到新的数组位置的时候,HashMap并不会将元素放在LinkedList的尾部,而是放在头部,这是为了避免尾部遍历(tail traversing)。如果条件竞争发生了,那么就死循环了
TreeMap
LinkedHashMap
ConcurrentHashMap
标签:扩容,Map,Set,HashMap,实现,List,数组,大小 From: https://www.cnblogs.com/yifanSJ/p/17580753.html