Java平台提供了一个全新的集合框架,它主要有一组操作对象的接口组成,不同的接口描述不同的数据类型。
首先区分一下三个概念:
- colection 集合,用来表示任何一种数据结构;
- Collection 集合接口,指的是 java.util.Collection接口,是 Set、List 和 Queue 接口的超类接口;
- Collections 集合工具类,指的是 java.util.Collections 类。
Java 集合框架图
Java集合框架类层次结构图
集合接口:Connection,Iterator,List,Map,Set,6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
抽象类:AbstractConnection,AbstractList,AbstractSet,AbstractMap和AbstractSequentialList,5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。
实现类:8个实现类(实线表示),对接口的具体实现。
Collection
接口是一组允许重复的对象;
Set
接口继承 Collection,但不允许重复,使用自己内部的一个排列机制;
List
接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列;
Map
接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。
容器中的元素类型都为Object。从容器取得元素时,必须把它转换成原来的类型。
几个比较重要的接口和类简介
1、List接口
List 关心的是索引,与其他集合相比,List特有的就是和索引相关的一些方法:get(int index) 、 add(int index,Object o) 、 indexOf(Object o) 。
ArrayList
可以将它理解成一个可增长的数组,它提供快速迭代和快速随机访问的能力。
LinkedList
中的元素之间是双链接的,当需要快速插入和删除时LinkedList成为List中的不二选择。
Vector
是ArrayList的线程安全版本,性能比ArrayList要低,现在已经很少使用
2、Set接口
Set关心唯一性,它不允许重复。
HashSet
当不希望集合中有重复值,并且不关心元素之间的顺序时可以使用此类。
LinkedHashset
当不希望集合中有重复值,并且希望按照元素的插入顺序进行迭代遍历时可采用此类。
TreeSet
当不希望集合中有重复值,并且希望按照元素的自然顺序进行排序时可以采用此类。(自然顺序意思是某种和插入顺序无关,而是和元素本身的内容和特质有关的排序方式,譬如“abc”排在“abd”前面。)
3、Queue接口
Queue
用于保存将要执行的任务列表。
LinkedList
同样实现了Queue接口,可以实现先进先出的队列。
PriorityQueue
用来创建自然排序的优先级队列。番外篇中有个例子http://android.yaohuiji.com/archives/3454
你可以看一下。
4、Map接口
Map关心的是唯一的标识符。他将唯一的键映射到某个元素。当然键和值都是对象。
HashMap
当需要键值对表示,又不关心顺序时可采用HashMap。
Hashtable
注意Hashtable中的t是小写的,它是HashMap的线程安全版本,现在已经很少使用。
LinkedHashMap
当需要键值对,并且关心插入顺序时可采用它。
TreeMap
当需要键值对,并关心元素的自然排序时可采用它。
集合接口
1. Connection接口
用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。
(1) 单元素添加、删除操作:
boolean add(Object o):将对象添加给集合
boolean remove(Object o): 如果集合中有与o相匹配的对象,则删除对象o
(2) 查询操作:
int size() :返回当前集合中元素的数量
boolean isEmpty() :判断集合中是否有任何元素
boolean contains(Object o) :查找集合中是否含有对象o
Iterator iterator() :返回一个迭代器,用来访问集合中的各个元素
(3) 组操作 :作用于元素组或整个集合
boolean containsAll(Collection c): 查找集合中是否含有集合c 中所有元素
boolean addAll(Collection c) : 将集合c 中所有元素添加给该集合
void clear(): 删除集合中所有元素
void removeAll(Collection c) : 从集合中删除集合c 中的所有元素
void retainAll(Collection c) : 从集合中删除集合c 中不包含的元素
(4) Collection转换为Object数组 :
Object[] toArray() :返回一个内含集合所有元素的array
Object[] toArray(Object[] a) :返回一个内含集合所有元素的array。运行期返回的array和参数a的型别相同,需要转换为正确型别。
此外,您还可以把集合转换成其它任何其它的对象数组。但是,您不能直接把集合转换成基本数据类型的数组,因为集合必须持有对象。
“斜体接口方法是可选的。因为一个接口实现必须实现所有接口方法,调用程序
就
需要一种途径来知道一个可选的方法是不是不受支持。如果调用一种可选方法时,一个 UnsupportedOperationException
被抛出,则操作失败,因为方法不受支持。此异常类继承 RuntimeException 类,避免了将所有集合操作放入 try-catch 块。”
Collection不提供get()方法。如果要遍历Collectin中的元素,就必须用Iterator。
1.1.AbstractCollection 抽象类
AbstractCollection 类提供具体“集合框架”类的基本功能。虽然您可以自行实现 Collection
接口的所有方法,但是,除了iterator()和size()方法在恰当的子类中实现以外,其它所有方法都由 AbstractCollection
类来提供实现。如果子类不覆盖某些方法,可选的如add()之类的方法将抛出异常。
1.2.Iterator 接口
Collection 接口的iterator()方法返回一个 Iterator。Iterator接口方法能以迭代方式逐个访问集合中各个元素,并安全
的从Collection 中除去适当的元素。
(1) boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素。如果到达集合结尾,则抛出NoSuchElementException异常。
(2) void remove(): 删除上次访问返回的对象。本方法必须紧跟在一个元素的访问后执行。如果上次访问后集合已被修改,方法将抛出IllegalStateException。
“Iterator中删除操作对底层Collection也有影响。”
迭代器是 故障快速修复(fail-fast)的。这意味着,当另一个线程修改底层集合的时候,如果您正在用 Iterator
遍历集合,那么,Iterator就会抛出 ConcurrentModificationException (另一种
RuntimeException异常)异常并立刻失败。
2.List接口
List 接口继承了 Collection 接口以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。
(1) 面向位置的操作包括插入某个元素或 Collection 的功能,还包括获取、除去或更改元素的功能。在 List 中搜索元素可以从列表的头部或尾部开始,如果找到元素,还将报告元素所在的位置 :
void add(int index, Object element): 在指定位置index上添加元素element
boolean addAll(int index, Collection c): 将集合c的所有元素添加到指定位置index
Object get(int index): 返回List中指定位置的元素
int indexOf(Object o): 返回第一个出现元素o的位置,否则返回-1
int lastIndexOf(Object o) :返回最后一个出现元素o的位置,否则返回-1
Object remove(int index) :删除指定位置上的元素
Object set(int index, Object element) :用元素element取代位置index上的元素,并且返回旧的元素
(2) List 接口不但以位置序列迭代的遍历整个列表,还能处理集合的子集:
ListIterator listIterator() : 返回一个列表迭代器,用来访问列表中的元素
ListIterator listIterator(int index) : 返回一个列表迭代器,用来从指定位置index开始访问列表中的元素
List subList(int fromIndex, int toIndex) :返回从指定位置fromIndex(包含)到toIndex(不包含)范围中各个元素的列表视图
“对子列表的更改(如 add()、remove() 和 set() 调用)对底层 List 也有影响。”
3.Set接口
Set 接口继承 Collection 接口,而且它不允许集合中存在重复项,每个具体的 Set 实现类依赖添加的对象的 equals()方法来检查独一性。Set接口没有引入新方法,所以Set就是一个Collection,只不过其行为不同。
3.1. Hash表
Hash表是一种数据结构,用来查找对象。Hash表为每个对象计算出一个整数,称为Hash
Code(哈希码)。Hash表是个链接式列表的阵列。每个列表称为一个buckets(哈希表元)。对象位置的计算 index = HashCode
% buckets (HashCode为对象哈希码,buckets为哈希表元总数)。
当你添加元素时,有时你会遇到已经填充了元素的哈希表元,这种情况称为Hash Collisions(哈希冲突)。这时,你必须判断该元素是否已经存在于该哈希表中。
如果哈希码是合理地随机分布的,并且哈希表元的数量足够大,那么哈希冲突的数量就会减少。同时,你也可以通过设定一个初始的哈希表元数量来更好地控制哈
希表的运行。初始哈希表元的数量为 buckets = size * 150% + 1 (size为预期元素的数量)。
如果哈希表中的元素放得太满,就必须进行rehashing(再哈希)。再哈希使哈希表元数增倍,并将原有的对象重新导入新的哈希表元中,而原始的哈希表元被删除。load factor(加载因子)决定何时要对哈希表进行再哈希。在Java
编程语言中,加载因子默认值为0.75,默认哈希表元为101。
- 大小: 8.3 KB
- 大小: 45.9 KB
分享到:
相关推荐
xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...
Java集合框架是Java编程语言中的一个核心组成部分,它为存储、管理和操作对象提供了一套统一的接口和类。本文将深入解析Java集合框架的各个方面,包括Collection、List、Set和Map,以及它们的相关实现和使用原理。 ...
### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...
### Java集合框架详解 #### 一、Java集合框架概述 Java集合框架是Java标准库的重要组成部分,它提供了存储和操作对象的各种数据结构。通过使用集合框架,开发人员可以轻松地管理不同类型的数据集,并且能够利用...
Java集合框架是Java编程语言中一个至关重要的组成部分,它提供了数据结构和算法的抽象,使得开发者可以方便地存储和管理各种类型的数据。本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java...
集合是将多个元素组成一个单元的...Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了Java集合框架位于java.util包中
Java集合框架是Java编程语言中的核心部分,它提供了一组高效、灵活的数据结构,使得开发者可以方便地存储和管理各种类型的数据。Java集合框架主要包括两大类:Collection和Map。 Collection接口是所有单值容器的父...
本文档为本人学习 java 集合框架期间的学习总结笔记,希望对新学习的朋友有所帮助和参考价值。本人java 开发时间不是太长,可能存在不完善或不对之处,欢迎指正!
6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6....
JAVA学习 Java集合框架.ppt
面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣...
Java集合框架,set、list接口及其子集,接口的继承关系
根据提供的信息,我们可以总结并详细解释关于Java集合框架的一些关键知识点。这些知识点主要涉及Java集合框架中的各种数据结构,如List、Set、Map等,并深入探讨了它们在实际应用中的特性与用途。 ### Java集合框架...
《数据结构和Java集合框架》是清华大学出版社出版的一本经典教材,主要涵盖了计算机科学中的核心概念——数据结构以及Java编程语言中的集合框架。这本书通过深入浅出的方式,讲解了如何用Java实现各种常用的数据结构...
一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合框架练习 一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合框架练习 一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合...
Java集合框架是Java编程语言中一个至关重要的组成部分,它为数据存储和操作提供了丰富的类库。泛型是Java 5引入的一项创新特性,极大地增强了集合框架的安全性和效率。本讲解将深入探讨这两个主题,以及与之相关的...
List set ArraryList Map java集合框架笔记 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用