java List 、Set 、Map集合联系与区别

List Map Set 集合

一、基础概念

1. Collection 和 Map 接口

​ Java集合框架主要由 CollectionMap两个根接口及其子接口、实现类组成。

1) Collection 接口是Set、List、和Queue接口的父接口:

Collection: Set 、List 、Queue 1. Set集合包括: HashSet ( LinkedHashSet)、SortedSet (TreeSet)、EnumSet 2. List集合包括: ArrayList 、 LinkedList 、 Vector 3. Queue集合: (并发编程中涉及,一般用于缓冲,并发访问) 其中 ArrayList 、LinkedList 、HashSet 、 TreeSet 为常用实现类。

2) Map 接口实现类保存具有映射关系的数据。每项数据由键值对(key ,value)组成,其中key不可重复:

Map 主要实现类:HashMap (LinkedHashMap)、SortedMap(TreeMap) 、HashTable(Properties)、 EnumMap等

其中 HashMap 、TreeMap 为常用实现类。

二、List 集合

​ List集合储存对象为 重复且有序

1. ArrayList :数组集合类型;可动态增加容量

​ 特点:元素增删慢,查询快

2. LinkedList :链表集合类型;双向循环列表,可用作为堆栈

​ 特点:方便增删

3.常用方法:

​ 具体方法查看 ArrayList APILinkedList API

​ add(Object e):添加元素,按照插入的顺序排列

​ add(int index, Object e):向指定索引处添加元素,原有元素依次后移

​ remove(Object e):删除指定元素,返回值为被删除的元素

​ remove(int index):删除指定索引处元素,返回值为被删除的元素

​ set(int index, Object e):将索引处的元素替换成指定元素,返回值为替换前的元素

​ get(int index):获取指定索引处的元素,并返回该元素

三、Set集合

​ Set集合储存对象为 唯一且无序 。(插入顺序与遍历循序不一致)

1. HashSet :元素不重复且无序集合,有且仅有一个元素为null

2. TreeSet:元素不重复但有序(树结构)集合 ,元素不能为null;

3. 常用方法:

​ 具体方法查看 HashSet API TreeSet API

boolean add(E e) 将指定的元素添加到此组如果尚未存在。
void clear() 删除所有从这个集合的元素。
Object clone() 返回一个浅拷贝的HashSet实例:元素本身不是克隆。
boolean contains(Object o) 如果这个集合包含指定的元素返回true。
boolean isEmpty() 如果这组不包含任何元素返回true。
Iterator<E> iterator() 返回一个迭代器在这个集合的元素。
boolean remove(Object o) 从这组删除指定的元素是否存在。
int size() 返回元素的数量在这集(基数)。

四、 Map集合

​ Map集合接口 表示一个键值对(key,value)的映射。其中:

​ 1.KeySet:为一个Map中 键(key)的集合,以Set的形式保存,所以不能重复。通过Map.KeySer()方法获取。遍历方法:

Set set = map.KeySet();
for(Object key : set){
    System.out.println(map.get(key));
}
​ 2.Values: 为一个Map中 值(value)的集合,以Collection的形式保存,所以可重复。通过Map.Values()方法获取。遍历方法:
Collection values = map.Values();
Iterator it = values.iterator();
while(it.hasNext()){
    System.out.printLn(it.next());
}

​ 3.Entry:为Map接口中的静态内部接口,表示某个键值对的映射。通过Map.entrySet()方法获取一组Entry集合,并保存在Set中;

遍历方法:

Set entrySet = map.entrySet();
 for (Object entrys : entrySet) {
     Map.Entry entry = (Map.Entry) entrys; //获取到一组Entry
    System.out.println(entry);      //key=value
     System.out.println(entry.getKey() + " / " + entry.getValue());
 }
  1. HashMap: 速度快,无序 ; 线程不安全,key-value 允许为空

  2. TreeMap: 有序 ,效率比hashMap低

  3. LinkedHashMap: (HashMap子类)结合HashMap和TreeMap的优点:有序效率高

应用场景:

​ 快速查询考虑 HashMap ;

​ 需特定排序考虑 TreeMap ;

​ 仅需要插入顺序考虑LinkedhashMap ;

HashMap API ;

猜你喜欢

转载自blog.csdn.net/StarryaSky/article/details/82254350