它们都继承自Collection类。
10点不同:
序号 | 属性 | java.util.List | java.util.Set | java.util.Map |
---|---|---|---|---|
1 | 重复元素 | List允许存储重复元素。 | Set不允许存储重复元素。 | Map以键值对形式存储数据,key不允许重复,value可以重复。 |
2 | 插入顺序 | List以插入顺序存储元素。 |
大部分Set实现类不维护插入顺序。 HashSet不维护插入顺序。 LinkedHashSet维护插入顺序。 TreeSet以自然顺序排序。 |
大部分Map实现类不维护插入顺序。 HashMap不维护插入顺序。 LinkedHashMap维护key的插入顺序。 TreeMap以key的自然顺序排序。 |
3 | null keys | List允许存储多个null值。 |
大部分Set实现类允许存储一个null值。 TreeSet和ConcurrentSkipListSet 不允许存储null值。 |
Map实现类: HashMap允许一个null键和多个null值。 LinkedHashMap允许一个null键和多个null值。 TreeMap不允许null键,允许多个null值。 Hashtable不允许null键和null值。 ConcurrentHashMap不允许null键和null值。 ConcurrentSkipListMap不允许null键和null值。 |
4 | 获取指定索引的元素 | List实现类提供了get方法获取指定索引的元素。get方法直接通过指定索引获取元素,因此时间复杂度为O(1)。 | Set实现类不提供此类方法。 | Map实现类不提供此类方法。 |
5 | 子类 | ArrayList LinkedList Vector CopyOnWriteArrayList |
HashSet CopyOnWriteArraySet LinkedHashSet TreeSet ConcurrentSkipListSet EnumSet |
HashMap Hashtable ConcurrentHashMap LinkedHashMap TreeMap ConcurrentSkipListMap IdentityHashMap WeakHashMap EnumMap |
6 | listIterator | listIterator方法遍历元素并返回ListIterator对象。 listIterator相对iterator方法提供了额外的方法:hasPrevious(), previous(), nextIndex(), previousIndex(), add(E element), set(E element)。 |
Set没有提供类似listIterator的方法,只是简单返回Iterator。 | Map提供了三种iterator: map.keySet().iterator() 遍历key并返回Iterator对象。 map.values().iterator() 遍历value并返回Iterator对象。 map.entrySet().iterator() 遍历key和value并返回Map.Entry对象。 |
7 | 结构和调整大小 | List是可调整大小的数组。 | Set使用Map实现。因此Set的结构和调整大小与Map相同。 | Map使用哈希技术存储键值对。 |
8 | 基于结构/随机访问的索引 | ArrayList使用基于索引的数组实现,因此提供了随机访问。LinkedList不是基于索引的结构。 | Set不是基于索引的结构。 | Map不是基于索引的结构。 |
9 | 非同步的子类 | ArrayList LinkedList |
HashSet LinkedHashSet TreeSet EnumSet |
HashMap LinkedHashMap TreeMap IdentityHashMap WeakHashMap EnumMap |
10 | 同步的子类 | Vector CopyOnWriteArrayList |
CopyOnWriteArraySet ConcurrentSkipListSet |
Hashtable ConcurrentHashMap ConcurrentSkipListMap |
http://www.javamadesoeasy.com/2016/02/difference-between-list-set-and-map-in.html
网友评论