面试经常被问到set,map,list这几个常用的数据集。
1 set map list各自特点
set不按照特定方式排序,继承于Collection并且无重复值,允许出现空值,无序体现在插入顺序和遍历顺序不一致。
set不重复的原理:set存储时候会对值进行一次hashcode操作,计算出哈希值,然后通过移位等运算,计算出这个值应该存储的位置,如果当前位置未被占据则直接存储值,如果已经存在数据,则调用该元素的equals方法再次进行比较,如果返回true,则值重复不允许存储,如果为false则继续添加。
list 元素按照线性方式存储,继承于Collection可以存在重复值。
map按照键值对来存储,未继承Collection。
2 set map list各自内容
set
set下面有hashSet,treeSet
list下面有ArrayList LinkList Vector
map下面有hashMap,treeMap,hashTable
set查找时候采用的是二分法查找,速度较快。treeSet存储值时候会自动将值进行排序
(二分法查找,先在顺序固定的数组中,取出中间值进行比较,如果小于(或者大于中间值)再取对应区域内的中间值进行比较以此类推)
hashSet是哈希表结构,treeSet是红黑树结构,所以为有序的。hashSet和treeSet都是线程不安全的。
list
list分为ArrayList和LinkedList。ArrayList为数组,LinkedList为链表,数组查找速度快,但是增删慢,因为移动一个后面相关的都需要移动。LinkedList查找速度慢,增删快,LinkedList增删只需要拆掉之前两个数对应关系和新的建立连接就可以。
map
HashMap,HashTable,TreeMap,LinkedHashMap
HashTable无序但线程安全,值与键值都不能为null
TreeMap基于红黑树进行排序的map,默认是升序
LinkedHashMap 相当于一个栈,先进后出
HashMap线程不安全。