List和Set以及map的区别(图解)
list和set的区别:
如下图所示:list中可以有重复元素,set中不可以。
具体解释:
1.list:ArrayList和LinkedList是我们常用的数据结构,它们都是线性表,ArrayList是顺序存储的线性表,LinkedList是链式存储的线性表。
LinkedList:
LinkedList是一个双向链表, 当数据量很大或者操作很频繁的情况下,添加和删除元素时具有比ArrayList更好的性能。但在元素的查询和修改方面要弱于ArrayList。
ArrayList:顺序表如下。
1 | 2 | 3 | 4 |
2.set:HashSet和TreeSet的区别两者主要在实现方式、数据是否有序以及是否可以放入null值等三方面存在区别。
一、实现方式
HashSet:HashSet是哈希表实现的。
TreeSet:TreeSet是二叉树实现的。
二、数据是否有序
HashSet:HashSet中的数据是无序的。
TreeSet:Treeset中的数据是自动排好序的。
三、是否可以放入null值
HashSet:可以放入null,但只能放入一个null。
TreeSet:不允许放入null值。
LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双向链表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序(同LinkedHashMap)。
2.map
区别:
HashMap不是线程安全的,HashTable是线程安全。
HashMap允许空(null)的键和值(key),HashTable则不允许。
HashMap性能优于Hashtable。
Map
1.Map是一个以键值对存储的接口。Map下有两个具体的实现,分别是HashMap和HashTable.
2.HashMap是线程非安全的,HashTable是线程安全的,所以HashMap的效率高于HashTable.
3.HashMap允许键或值为空,而HashTable不允许键或值为空.
HashMap、Treemap两种常规Map性能
HashMap:适用于在Map中插入、删除和定位元素。
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。
总结:HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。