- List 是一个有序集合,里面可以存储重复的元素
- Set 是一个不能存储相同元素的集合
- Map 是一个通过键值对的方式存储元素的,键不能重复
Java 容器分为Collection 和Map 两大类,Collection 集合的子接口有Set、List、Queue 三种子接口。其中,前两种Set、List比较常用,Map 接口不是Collection 的子接口。
- Collection 集合主要有List 和 Set 两大接口
- List : 一个有序(元素存入集合的顺序和取出顺序一致)容器,元素可以重复,可以插入多个null元素,元素都有索引。常用实现类有ArrayList、LinkedList 和 Vector.
- Set : 一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素,只允许存入一个null元素,必须保证元素唯一性。常用实现类有HashSet、LinkedHashSet 以及TreeSet.
- Map 是一个键值对集合,存储键、值和之间的映射;Key无序,唯一;value 不要求有序,允许重复。Map 没有继承于Collection 接口,从Map 集合中检索元素时,只要给出键对象,就会返回对应的值对象。常用实现类:HashMap、TreeMap、HashTable、LinkedHashMap、ConcurrentHashMap
List 和 Map 的区别?
List : 是存储单列数据的集合,数据有顺序,允许重复;
Map : 是存储键和值的双列数据的集合,无顺序,其键不能重复,值可以重复。
总结:
- List 有重复值,Map 没有重复 key,但可以有重复值
- List 有序,Map 不一定有序
- List 只能存单列值,Map 可以存双列值
List、Set、Map三个接口存取元素时,各有什么特点?
List 以特定索引来存取元素,可以有重复元素。
Set 不能存放重复元素(用对象的equals()方法来区分元素是否重复)。
Map 保存键值对(key-valuepair)映射,映射关系可以是一对一或多对一。
Set 和 Map 容器都有基于哈希存储和排序树的两种实现版本,
基于哈希存储的版本理论存取时间复杂度为O(1),
而基于排序树版本的实现在插入或删除元素时会按照元素或元素的键(key)构成排序树从而达到排序和去重的效果。
List、Set、Map是否继承自Collection接口?
List、Set是,Map不是。
Map 是键值对映射容器,与List 和 Set 有明显区别,
而Set 存储的零散元素且不允许有重复元素(数学中集合也是如此),
List 是线性结构容器,适用于按数值索引访问元素的情形。