集合类是Java基础技术中十分重要的内容。Java集合类封装了集合中常用数据结构和算法,它犹如哪咤的烽火轮,功能强大,而且不用亲自制造(Made in America)。
首先看下面这张表,本文即通过它展开相关内容。
|
Implementations
|
Hash Table
|
Resizable Array
|
Balanced Tree
|
Linked List
|
Hash Table + LinkedList
|
Interfaces
|
Set
|
HashSet
|
|
TreeSet
|
|
LinkedHashSet
|
List
|
|
ArrayList
|
|
LinkedList
|
|
Map
|
HashMap
|
|
TreeMap
|
|
LinkedHashMap
|
图1
Java集合类的种类
注意图1第二列,Java在设计集合结构时,把集合划成3类:第一种Set,普通的无序集;第二种List,偏序集;第三种Map,有序对的集合。其中Set和List都继承自Collection接口,Map没有从Collection继承。这样做也是没办法的事,因为Map并不是一个通常意义的集合,它的元素是一个key-value-pair,而Collection根本就不是Map,它还没有key的概念。虽然Collection和Map彼此没有继承关系,但它们有大量同名的方法。值得注意的是,Map提供了keySet()和values()两个方法,分别返回一个key的集合和值的集合。
示例1:通过对一个HashSet对象和一个ArrayList对象中元素使用跌代器可以显示Set与List中元素之间的顺序关系:Set中元素是无序的,List不是。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class ElementOrder ...{
public static void main(String[] args) ...{
Iterator it = null;
Set ht = new HashSet();
ht.add("htA");
ht.add("htB");
ht.add("htC");
ht.add("htD");
it = ht.iterator();
while (it.hasNext()) ...{
System.out.println(it.next());
}
List al = new ArrayList();
al.add("alA");
al.add("alB");
al.add("alC");
al.add("adD");
it = al.iterator();
while (it.hasNext()) ...{
System.out.println(it.next());
}
}
}
示例2:Map类型的集合对象通过keySet()和values()两个方法,分别返回一个key的集合(Set类型)和值的集合(Collection类型)。
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class TestMap ...{
public static void main(String[] args) ...{
Iterator it = null;
Map tm = new HashMap();
tm.put("a", new Integer(1));
tm.put("b", new Integer(2));
tm.put("c", new Integer(3));
Set tk = tm.keySet();
it = tk.iterator();
while (it.hasNext()) ...{
System.out.println(it.next());
}
Collection tv = tm.values();
it = tv.iterator();
while (it.hasNext()) ...{
System.out.println(it.next());
}
}
}
Java集合类基于的常见数据结构
注意到图1 的第二行,是Java集合类基于的常见数据结构,它是集合对象中元素的组织方式。不同数据结构的类都有一些特定操作,参见示例。
示例3 List的一些排序操作。来自The Java Developers Almanac 1.4
// Create a list
String[] strArray = new String[] ...{"z", "a", "C"};
List list = Arrays.asList(strArray);
// Sort
Collections.sort(list); // C, a, z
// Case-insensitive sort
Collections.sort(list, String.CASE_INSENSITIVE_ORDER); // a, C, z
// Reverse-order sort
Collections.sort(list, Collections.reverseOrder()); // z, a, C
// Case-insensitive reverse-order sort
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
Collections.reverse(list); // z, C, a
区别与联系
图1种各类的区别和联系很明显:同行同集合类性,同列同数据结构。
操作
根据Java集合框架的体系,不同的集合类在拥有父类型的操作时由于本身的集合类型和数据结构类型的不同,都有其特有的方法。兄弟类之间有同名的方法也可能因为同样的原因有不同的实现,这正好体现了OO的多态性。
其他
不可忽视的是java.util.Collections提供很多操作集合对象的静态方法。集合在Java还有其他非官方实现形式,如开源的Trove等。值得一提的是,示例1中Set ht = new HashSet();的定义方式体现了DIP(Dependence Inversion Principle,依赖倒转原则)。
参考资料:
· JDK API Docments
· Java与模式,阎宏
· The Java Developers Almanac 1.4, Volume
分享到:
相关推荐
在Java中实现文件对比,可以使用内置的`java.nio.file`包中的`Files`类,结合`java.util.Comparator`接口,实现定制化的文件比较逻辑。例如,可以比较文件的大小、最后修改时间,甚至内容。另外,还有许多第三方库,...
内容概要:本文详细介绍了Java集合框架的重要性和在Android开发中的应用。首先,阐述了集合框架的基本概念,包括接口...同时,讨论了不同类型集合类的性能对比,有助于开发者根据具体需求选择合适的集合类。
本文深入介绍了Java集合框架的重要组成部分及其相关接口与实现类,覆盖了主要集合类型(List、Set、Map等)的特点及基本使用方法,并对比了不同集合类间的优劣及适用场景。此外,本文还探讨了集合框架的高级特性(如...
Collection是最基础的接口,它是所有集合类的父接口。List和Set接口继承自Collection,分别代表有序可重复元素的集合和无序不重复元素的集合。Map接口则用于存储键值对的数据。 2. **两种特殊的Java容器类:List和...
基于java+OpenCV人脸识别+图片相似度检测+源码+开发文档说明+代码解说,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: 检测任意两张图片的相似度思路 ...
### C++与JAVA语言对比分析 #### 一、引言 C++与JAVA作为两种流行的编程语言,在软件开发领域有着广泛的应用。虽然JAVA的设计者熟悉C++并借鉴了其语法结构,但两者之间存在诸多差异。本文将详细介绍C++与JAVA在多...
- **集合类**:解释了集合框架的基本概念。 - **核心接口及其实现**:介绍了集合框架中的主要接口及其典型实现类。 - **Set与List的区别**:对比了Set和List集合的不同之处。 - **Map接口**:讲解了Map接口的...
9. **集合框架**:涵盖ArrayList、LinkedList、HashSet、HashMap等常用集合类的使用。 10. **IO流**:介绍输入/输出流的概念,以及文件读写、缓冲流、对象序列化等操作。 11. **多线程**:讲解线程的基本概念,...
- **集合类**:详述了Java集合框架中的主要接口和实现类,如List、Set、Map等,以及它们之间的关系和适用场景。 - **泛型**:再次强调了泛型在集合框架中的重要性,以及如何利用泛型避免类型转换错误和提升代码的...
- **并发集合**:详细介绍Java提供的各种并发集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,并讨论它们适用的场景和优缺点。 #### 四、案例分析 书中通过大量的实际案例分析,帮助读者更好地理解并发...
7. **比较Lambda与替代方案(Comparing lambda approaches to alternatives)**:这部分将lambda表达式与其他编程方式(比如匿名类)进行对比,说明在不同的场景下lambda表达式的优势和适用性。 文档还提供了练习和...
6. **集合框架**:详细讲解了ArrayList、LinkedList、HashSet、HashMap等集合类的内部工作原理,以及如何选择合适的集合类型。还涉及了流(Stream) API的使用,这是Java 8引入的新特性,用于处理集合数据。 7. **...
1. **集合类的区别**: - **List** 和 **Set** 的主要区别在于是否允许元素重复以及元素的排列方式。 - **HashSet** 如何保证不重复:通过哈希码和equals方法来判断元素是否相同。 2. **HashMap的实现**: - 是否...
Java API是Java编程语言的核心组成部分,它包含了Java平台标准版(Java SE)的各种类库,为开发者提供了大量的接口、类和方法,使得开发者能够构建出功能丰富的应用程序。本资源包括了Java API的1.5和1.6两个版本的...
2. **Java集合框架** - 题目:对比ArrayList和LinkedList,分析其在不同场景下的优缺点。 - 答案:ArrayList基于动态数组,访问速度快,插入和删除元素性能相对较差。LinkedList基于双向链表,插入和删除快,但...
面试中,Java 集合框架和多线程并发是常见的话题,因为它们是构建可扩展和健壮应用的基础。本题旨在考察候选人在实际并发场景下对 HashMap 和 ConcurrentHashMap 的理解和应用。 HashMap 和 ConcurrentHashMap 的...
Java 1.8 JDK中文帮助文档是Java开发者的重要参考资料,它包含了Java开发工具包的全面说明,涵盖了语言规范、API接口、类库以及各种开发工具的详细信息。这份文档是理解、学习和使用Java 8的关键资源。 在Java 1.8...
5. **集合框架**:Java集合框架包括ArrayList、LinkedList、HashSet、HashMap等数据结构,它们用于存储和操作对象。实验可能涉及到这些数据结构的使用和性能比较。 6. **输入/输出(I/O)**:Java的I/O流系统允许程序...
"优秀的JAVA学习文档"集合了542篇文章,涵盖了各种Java相关的主题,对于想要深入理解和提升Java技能的学习者来说,这是一个宝贵的资源。 1. **实体对象的抽象以及一种基于数据库的实现(转)**: 这篇文章可能探讨了在...