说到java集合类,首先我们要有一个整体的概念。两个绕不过去的大哥,Collection和Map。
让我们先来认识一下Collection家族成员。
从图中我们从左往右,从上往下,挨个过一下这些类。
Collection接口:
java集合的顶级父类,里面定义了集合常用的方法。
boolean isEmpty();
boolean contains(Object var1);
Iterator<E> iterator();
Object[] toArray();
<T> T[] toArray(T[] var1);
boolean add(E var1);
boolean remove(Object var1);
List接口:
继承了collection接口;存入list集合中的元素,会保存存入的顺序。
set接口:
继承了collection接口,存入set集合中的元素,不能有重复的。
ArrayList类(可实例化):
基于数组实现,所以对于查找操作效率比较高;
LinkedList(可实例化类):
基于双向链表实现,对于插入和删除操作效率比较高;
priorityQueue:
一个基于优先级的无序队列,存储的对象要有可比性,是线程不安全的。
ArrayQueue:
一个循环队列,内部基于数组实现的,无法自动扩容,需要手动调用resize
()方法;
Vector:
类比ArrayList,只不过是方法加了锁,线程安全。
HashSet:
底层基于HashMap实现,没有重复的元素,可以为null,线程不安全;
TreeSet:
有序,不可重复,红黑树
LinkedHashSet:
在hashset的基础上,保留了插入顺序。
排序的集合,存储的数据都需要实现比较功能。
Map接口
是一种双列集合,以键值对的形式形式存储数据。
HashMap:
线程不安全、可以存放null值,哈希链表法;
HashTable:
与HashMap类似,线程安全
TreeMap:
基于红黑树实现,有序
LinkedHahsMap:
与HashMap类似,有序进去,有序出来;
ConcurrentHashMap:
分段锁,线程安全