Java集合框架和重要接口、类

一、集合框架

Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes

1、接口

Java Collections Framework 接口提供抽象数据类型来表示集合。

java.util.Collection是集合框架的根接口。它位于集合框架层次结构的顶部。它包含一些重要的方法,例如每个 Collection 类都必须实现的 size()、iterator()、add()、remove()、clear()
其他一些重要的接口是 java.util.List、java.util.Set、java.util.Queue、java.util.Map。Map 是唯一不继承自 Collection 接口的接口,但它是 Collections 框架的一部分。所有集合框架接口都存在于 java.util 包中。

2、实现类

Java Collections 框架为核心集合接口提供了实现类。我们可以使用它们在 Java 程序中创建不同类型的集合。

一些重要的集合类是 ArrayList、LinkedList、HashMap、TreeMap、HashSet、TreeSet。这些类解决了我们大部分的编程需求,但是如果我们需要一些特殊的集合类,我们可以扩展它们来创建我们的自定义集合类。

Java 1.5 提出了线程安全的集合类,允许我们在迭代它们时修改集合。其中一些是CopyOnWriteArrayList、ConcurrentHashMap、CopyOnWriteArraySet。这些类在 java.util.concurrent 包中。

所有集合类都存在于 java.utiljava.util.concurrent 包中。

3、集合类图

在这里插入图片描述

4、集合框架的好处

  • 减少开发工作量——它带有几乎所有常见类型的集合和有用的方法来迭代和操作数据。所以我们可以更专注于业务逻辑,而不是设计我们的集合 API。
  • 更好的质量——使用经过充分测试的核心集合类可以提高我们的程序质量,而不是使用任何自己开发的数据结构。
  • 可重用性和互操作性
  • 减少维护工作,因为每个人都知道 Collection API 类。

二、重要接口

1、Collection

public interface Collection<E> extends Iterable<E> {

}

Collecton继承另一个接口Iterable,由下图可以看出Collection实现了以下方法。
在这里插入图片描述

2、List

List集合类中的元素有序(添加顺序和取出顺序一致),可重复。
List集合中的每个元素有其对应的顺序索引

ArrayList:由数组来实现数据的存储,可以随机访问

Vector:和ArrayList类似,它是线程安全的

LinkedList:双向链表实现,可以快速在链表中间插入和删除元素。

3、Set

Set 是一个不能包含重复元素的集合。

TreeSet:基于红黑树实现,支持有序性操作。但是查找效率不如 HashSet,HashSet 查找的时间复杂度为 O(1),TreeSet 则为 O(logN)。

HashSet:基于哈希表实现,支持快速查找,但不支持有序性操作。使用 Iterator 遍历 HashSet 得到的结果是不确定的。

LinkedHashSet:具有 HashSet 的查找效率,并且内部使用双向链表维护元素的插入顺序。

4、Queue

Queue是一个集合,用于在处理之前保存多个元素。
Queue 还提供了额外的插入、提取和检查操作。

LinkedList:可以用它来实现双向队列。

PriorityQueue:基于堆结构实现,可以用它来实现优先队列。

5、Map

Map是一个将键映射到值的对象。映射不能包含重复的键:每个键最多可以映射到一个值。

TreeMap:基于红黑树实现。

HashMap:基于哈希表实现。

HashTable:和 HashMap 类似,但它是线程安全的,这意味着同一时刻多个线程同时写入 HashTable 不会导致数据不一致。它是遗留类,不应该去使用它,而是使用 ConcurrentHashMap 来支持线程安全,ConcurrentHashMap 的效率会更高,因为 ConcurrentHashMap 引入了分段锁。

LinkedHashMap:使用双向链表来维护元素的顺序,顺序为插入顺序或者最近最少使用(LRU)顺序。

5、迭代器接口

① Iterator()方法

Iterator 接口提供了迭代 Collection 元素的方法。我们可以使用iterator()方法获取迭代器的实例。

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("xiaoming");
        list.add("xiaohong");
        list.add("xiaoli");
        list.add("xiaosi");
         // 通过Iterator 迭代
        Iterator io = list.iterator();
        while(io.hasNext()) {
            System.out.println(io.next());
        }
    }

在List接口中实现了iterator方法。该方法类型为Iterator接口。
hasNext():判断是否还有下一个元素,返回boolean类型
next():将下一个元素返回

② foreach

增强for,底层仍然是迭代器,简化版的Iterator
基本语法

for(元素类型 元素名 : 集合名或数组名) {
	访问元素
}
public static void main(String[] args) {
        List list = new ArrayList();
        list.add("xiaoming");
        list.add("xiaohong");
        list.add("xiaoli");
        list.add("xiaosi");
        // 通过增强for循环遍历
        for (Object x : list) {
            System.out.println(x);
        }
    }

参考资料
JournalDev Java教程


版权声明:本文为jiangnb520原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。