List Set Map之间的不同

本文详细对比了Java中List、Set和Map三种核心集合类的区别,包括它们对重复元素的处理方式、是否保持插入顺序、对null的支持情况、索引访问特性、内部结构等方面的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

它们都继承自Collection类。
10点不同:

序号属性java.util.Listjava.util.Setjava.util.Map
1重复元素List允许存储重复元素。Set不允许存储重复元素。Map以键值对形式存储数据,key不允许重复,value可以重复。
2插入顺序List以插入顺序存储元素。大部分Set实现类不维护插入顺序。
HashSet不维护插入顺序。
LinkedHashSet维护插入顺序。
TreeSet自然顺序排序。
大部分Map实现类不维护插入顺序。
HashMap不维护插入顺序。
LinkedHashMap维护key的插入顺序。
TreeMap以key的自然顺序排序。
3null keysList允许存储多个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
6listIteratorlistIterator方法遍历元素并返回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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值