概述
- Set 是接口,继承自collection接口
- List 是接口,继承自collection接口
- Map 独立接口
- Queue 是接口,继承自collection接口
Set 接口以及其实现类(不包含重复元素)
- HashSet :底层数据结构是哈希表。(无序,唯一)
- LinkedHashSet :底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一
- TreeSet :底层数据结构是红黑树。(唯一,有序)
Map接口以及其实现类(key到value的映射)
-
Map不是collection的子接口或者实现类。Map是一个接口。
-
Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。
-
TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。
-
Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。
-
Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)
List接口以及其实现类(有序且允许元素重复)
- ArrayList:数组实现,查询快,增删慢,轻量级;(线程不安全)
- LinkedList:双向链表实现,增删快,查询慢 (线程不安全)
- Vector:数组实现,重量级 (线程安全、使用少)
Queue接口以及其实现类
- Queue接口与List、Set同一级别,都是继承了Collection接口。
- LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。
参考文章:java中collection集合
小例子有助于理解
-
HashMap
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, String> myMap = new HashMap<>();
myMap.put("key", "value");
System.out.println("第一次放入map后====="+myMap);
myMap.put("key", "value1");
System.out.println("放入进相同的key时======"+myMap);
myMap.put("key1", "value1");
System.out.println("放入相同的value时======"+myMap);
myMap.put(null, "value1");
System.out.println("放入的键为null时======="+myMap);
myMap.put(null, "value2");
System.out.println("第二次放入的键为null时======="+myMap);
}
}
根据上面代码的运行结果是:
总结:
1.HashMap的键是唯一的,当put相同的键时,会把键的值更新
2、HashMap是无序的,值是可以任意的
3、HashMap的键可以是null
-
HashSet
编写测试代码如下:
根据上面的代码,运行结果如下图:
总结:
1.HashSet没有get方法,所以要遍历的话需要使用foreach循环或者迭代器进行。
2.HashSet也是无序的,是根据HashCode方法和哈希表进行插入的,在jdk1.8中,如果插入的是数字,则结果像是排序好的。
3.HashSet的值可以为null。
图图图
总结:(和ArrayList用法基本相似,这里给出对比)
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
-
LinkedList
-
ArrayList
写入如下测试代码:
运行结果如图:
总结:
1.ArrayList是有序的,尾插入。
2.ArrayList是可以重复值的。
3.ArrayList可以存入null.
总结
- List、Set、Map是这个集合体系中最主要的三个接口。
- 其中List和Set继承自Collection接口。
- Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。
- List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
- Map也属于集合系统,但和Collection接口不同。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。
- SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。