set,map,list解读

面试经常被问到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线程不安全。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章