概述
趁着今天有空就来对前几天学的集合Collection做一个知识的总结归纳吧
集合(或者说容器)有三种,list,map和set,这三种都为Collection的子接口
List
List有三个实现类,分别为ArrayList,LinkedList和Vector
① ArrayList底层是一个数组,存放进去的数据具有下标或者说索引,通过add的方式往最后添加一个元素,通过get(下标)的方式获取该位置的元素,当数组空间满了之后(默认空间是10, DEFAULT_CAPACITY = 10),再往里添加元素时会进行扩容,扩容为原来的1.5倍。 扩容的实质就是新建一个1.5倍(DEFAULT_CAPACITY + DEFAULT_CAPACITY >> 1)空间的数组,然后将原数组拷贝到新的数组中
其特点是查询快,增删慢
② LinkedList底层是一个双向链表,存放的是一个node节点,node节点具有
class node{
node previous;用于指向上一个节点
Object element;存放数据
node next;用于指向下一个节点
}
其特点是增删快,查询慢(为了提高查询效率,如果位置偏后的话可以从后往前查)
③Vector线程安全,因为其内部方法都添加了synchronized,上面两个线程不安全
map
map有四个实现类,分别为HashMap、HashTable、TreeMap、LinkedHashMap
①HashMap底层是一个数组加链表,元素通过HashCode()方法获取hash值,再通过对数组长度(默认是16)进行求余获得的值就是该元素放在数组中的位置,如果该位置没有元素的话,那么直接放在该位置即可,如果该位置有元素,那么将单链表的形式存在该位置的链表最后,当链表长度超过8时,会转换成红黑树。
HashMap中有两个重要的参数,初始容量大小和加载因子,当数组长度超过阈值(初始容量大小*加载因子)时进行扩容,扩容为原数组长度的两倍,HashMap允许key和value存null值
②TreeMap底层是一个红黑树,并根据key来排序
③HashTable底层跟HashMap一样,数组加链表,但它是一个线程安全的,内部加了同步锁(synchronized),性能较差,key和value不允许存null值
④LinkedHashMap:继承了HashMap,底层是Hashmap+双链表,保存了记录的插入顺序,默认按照key值进行升序
Set
Set有三个实现类,分别为HashSet、LinkedHashSet、TreeSet
set是无序不可重复的,常用的是实现类是HashSet
这里就讲一下HashSet,HashSet底层实现了HashMap,用的方法也是调用了HashMap的方法,添加一个元素的时候,调用HashMap的put()方法,Key就是添加的元素,Value就是一个Object,为了避免反复创建对象,故用一个常量去当Value
关于这个set可能描述不是很准确,如果有不对的地方还请各位网友来纠正
最后
以上就是激动长颈鹿为你收集整理的学习完了,对三大集合(List、Set、Map)进行总结的全部内容,希望文章能够帮你解决学习完了,对三大集合(List、Set、Map)进行总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复