java-学习篇-集合

简介

所有的集合类都位于java.util包下,后来为了处理多线程环境下的并发安全问题,Java 5还在java.util.concurrent包下提供了一些多线程支持的集合类。
Java的集合类主要由两个接口派生而出:CollectionMap,是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。

Collection

子接口如下所示:

  1. Set(无序,元素不可重复)
  2. List(有序,元素可以重复)
  3. 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();

遍历集合

  1. Java 8使用Lambda表达式来遍历集合元素(Iterable接口新增forEach默认方法)
  2. Iterator(迭代器)
  3. 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内部以链表的形式来保存元素,插入、删除元素时性能比较好。

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对即作为红黑树的一个节点。

EnumMap

Hashtable

发布了28 篇原创文章 · 获赞 6 · 访问量 2621

猜你喜欢

转载自blog.csdn.net/u010019244/article/details/105282797