java基础List、Set、Map

来源:互联网 发布:中国新歌声网络直播权 编辑:程序博客网 时间:2024/04/25 20:20

List、Set继承Collection接口,Map不继承

List其元素有放入顺序,元素可重复;Set其元素无放入顺序,元素不可重复,重复元素会覆盖掉;

(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。

Set和List的区别

List:和数组类似,可动态改变大小,检索效率高,插入删除效率低,因为会改变元素位置

Set:检索效率低,插入删除效率高,插入和删除不会引起元素位置改变

Map:存储键值对数据(k-v)

List实现类:ArrayList、Vector、LinkedList

ArrayList:数组方式存储数据,插入删除元素慢,检索元素快,线程不安全的

Vector:数组方式存储数据,插入删除元素慢,检索元素快,线程安全的

LinkedList:双向链表方式存储数据,插入删除元素快,检索元素慢,线程不安全的

Set:HshSet、LinkedHashSet、TreeSet

HashSet:为快速查找设计的Set,存入HashSet的对象必须定义HashCode()

TreeSet:保存顺序的Set,底层为树结构,使用它可以从Set中提取有序数据

LinkedHashSet:具有HashSet快速查找的特点,且内部使用链表来维护元素的顺序(插入顺序)。于是在使用迭代器遍历Set时,结果按元素的插入次序展示

Map:HashMap、HashTable、TreeMap、WeakHashMap

HashMap:基于散列表实现,允许空键空值,线程不安全;LinkedHashMap:类似HashMap,遍历时获取的键值对顺序是其插入次序

HashTable:基于散列表实现,不允许空键空值,线程安全

TreeMap:基于红黑树数据结构实现,不允许空键空值,线程不安全;查看键或键值对时,他们会被排序

WeakHashMap:是改进版的HashMap,对“key”实行弱引用,如果一个key不再被外部引用,该key会被GC回收


hashmap的工作原理

HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象。”这里关键点在于指出,HashMap是在bucket中储存键对象和值对象,作为Map.Entry。这一点有助于理解获取对象的逻辑。如果你没有意识到这一点,或者错误的认为仅仅只在bucket中存储值的话,你将不会回答如何从HashMap中获取对象的逻辑。这个答案相当的正确,也显示出面试者确实知道hashing以及HashMap的工作原理。

1 0
原创粉丝点击