文章目录
简介
所有的集合类都位于java.util包下,后来为了处理多线程环境下的并发安全问题,Java 5还在java.util.concurrent包下提供了一些多线程支持的集合类。
Java的集合类主要由两个接口派生而出:Collection和Map,是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
Collection
子接口如下所示:
- Set(无序,元素不可重复)
- List(有序,元素可以重复)
- Queue(队列)
Collection接口定义的方法:
// java.util
public interface Collection<E> extends Iterable<E>
int size();
boolean isEmpty();
boolean contains(Object o);
// 返回Iterator对象,用于遍历集合里的元素。
Iterator<E> iterator();
// 将集合转换成数组
Object[] toArray();
Iterator<E> iterator();
boolean add(E e);
boolean remove(Object o);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? entends E> c);
// 取交集
boolean retainAll(Collection<?> c);
void clear();
遍历集合
- Java 8使用Lambda表达式来遍历集合元素(Iterable接口新增forEach默认方法)
- Iterator(迭代器)
- Java 5提供foreach
Iterator
Iterator仅用于遍历集合,Iterator本身并不提供盛装对象的能力。如果需要创建Iterator对象,则必须有一个被迭代的集合。
// java.util
public interface Iterator<E>
// 如果被迭代的集合元素还没有被遍历完,则返回true
boolean hasNext();
// 返回集合里的下一个元素
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
// java 8为Iterator新增的默认方法
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
**注:**Iterator迭代访问Collection集合元素时,Collection集合里的元素不能被改变。
List
元素有序、可重复的集合。
public interface List<E> extends Collection<E>
ArrayList
线程不安全
LinkedList
LinkedList与ArrayList、ArrayDeque的实现机制完全不同,后者内部以数组的形式来保存集合中的元素,随机访问有较好性能;而LinkedList内部以链表的形式来保存元素,插入、删除元素时性能比较好。
扫描二维码关注公众号,回复:
10464314 查看本文章
Vector
线程安全,比ArrayList的性能低。子类Stack
Set
HashSet
LinkedHashSet
SortedSet(接口)
TreeSet
EnumSet
Queue
PriorityQueue
Deque(接口)
双端队列。
ArrayDeque
ArrayList和ArrayDeque两个集合类的实现机制基本相似,底层都采用一个动态的、可重分配的Object[]数组来存储集合元素,当集合元素超出了该数组的容量时,系统会在底层重新分配一个Object[]数组来存储集合元素。
Map
Map保存的每项数据都是key-value对。Map中key是不可以重复的,key用于标识集合里的每项数据。
HashMap
- 线程不安全
- 可以使用null作为key或value。
LinkedHashMap
父类为HashMap
SortedMap(接口)
实现类TreeMap。
TreeMap
TreeMap就是一个红黑树数据结构,每个key-value对即作为红黑树的一个节点。