知芯

Java-Collections-Framework

2019-10-13

Java平台包括一个集合框架。集合是代表一组对象的对象(例如经典的Vector类)。集合框架是用于表示和操作集合的统一体系结构,使集合可以独立于实现细节进行操作。优点是:

  • 提供数据结构和算法来减少编程工作;
  • 提供高性能的数据结构和算法的实现来提高性能;
  • 建立集合来回传递的公共语言使得不相关的API之间可以相互操作;
  • 要求您学习多个特定集合API,降低学习API的工作量;
  • 不要求您设计特定的集合API,降低实现和设计API的工作量;
  • 提供集合的标准接口和操纵它们的算法,提高程序的复用性。

    Overview

    Tips

  • Java容器里只存放对象,对于基本数据类型(int, long, float, double等),将其包装成对象类型后(Integer, Long, Float, Double等)才能放到容器里。很多时候拆包装和解包装能够自动完成。
  • 通过泛型机制,Java collection能够容纳任何对象,Java 单继承机制中,所有对象都是Object的子对象,因此容器只需要支持Object对象即可。泛型本身并不需要虚拟机支持,只需要在编译阶段做一下简单的字符串替换即可。JDK 1.4以及之前版本不支持泛型,类型转换需要程序员显式完成。
  • 容器存放的是对象的引用,对象存放在堆中。

UML Class Diagram

collection.png

上图中提供了Queue接口,却没有StackStack的功能已被JDK 1.6引入的Deque取代。
map.png

Collection Implementations

Interface Hash Table Resizable Array Balanced Tree Linked List HashTable + Linked List
Set HashSet TreeSet LinkedHashSet
List ArrayList LinkedList
Deque ArrayDeque LinkedList
Map HashMap TreeMap LinkedHashMap

Iterator

只有容器本身清楚内部元素的组织方式,因此只能通过容器本身得到迭代器,每个容器通过内部类的形式实现自己的迭代器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ArrayList<String> list = new ArrayList<String>();
list.add(new String("Mon"));
list.add(new String("Tue"));
list.add(new String("Wen"));
// Get Iterator
Iterator<String> it = list.iterator();
while(it.hasNext()){
String toDay = it.next();
System.out.println(toDay);
}
//Enhanced for statement After Jdk 1.5
for(String toDay : list){
System.out.println(toDay);
}

Reference

Collections Framework Overview
《深入理解Java集合框架》系列文章

Tags: jcf
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章