java集合——概述

摘要

​ 本文主要介绍集合的整体概念,并作为接下来Java集合实现类讲解的索引。

图示

​ 这是在网上看到了这样一张图,感觉很清晰,内容也很全面,我决定按这张图,把自己熟悉的集合都仔细研究一下。

java集合

查看大图

各位置描述

位置 描述
左上灰色部分 已经过期,以后的开发中不要使用。
右上浅粉色部分 接口关系图
中间绿色部分 java.util包里集合具体实现类
右下灰色部分 java.util.concurrent包里面的类,用来处理java并发问题

集合分类

分类 描述
Map 双链集合,允许通过键来找到值
List 按照插入顺序保存元素
Set 不允许有重复元素
Queue 从一端插入元素,从另一端获取

实现类

接口 实现类
List ArrayList、LinkedList
Set HashSet、LinkedHashSet、TreeSet
Queue PriorityQueue、LinkedList
Map HashMap、LinkedHashMap、TreeMap、WeakHashMap、IdentityHashMap

底层数据结构

底层数据结构 实现类
数组 EnumMap、ArrayList、ArrayQueue
链表 LinkedHashSet、LinkedList、LinkedHashMap
红黑树 TreeMap、TreeSet
二叉堆 PriorityQueue
哈希表 HashMap、HashSet、LinkedHashMap、LinkedHashSet、WeakHashMap、IdentityHashMap

正文

一、集合的由来

​ 如果一个程序只包含固定数量且生命周期都是已知的对象,那么这是一个非常简单的程序

​ 为了满足常规的编程需要,我们要求能在任何时候,任何地点创建任意数量,甚至是不同类型的对象,由于数组只能装统一类型数据,而且长度固定,于是产生了集合。

二、集合特点
  • 集合只能存放对象。基本数据类型会自动装箱为包装类。
  • 集合存放的是对象的引用,对象本身还是放在堆内存中。
  • 集合可以存放不同类型,不限数量的数据类型。
三、迭代器

​ 使用集合必须对具体实现类进行操作,但是考虑如下状况:如果原本是对List进行编程,现在要把相同的代码用在Set上,如果能不关心容器类型只关心对集合得操作该怎么办?于是,迭代器因此产生。

​ 迭代器是一个对象,它的工作就是遍历并选择序列中的对象,而且客户端不需要关注序列的底层结构,Java中Iterator只能单向移动,但是其子接口ListIterator可以双向移动。

​ Iterator中有hashNext(),next(),remove()几个方法,ListIterator在它的基础上又添加了三种方法,分别是 add(),previous(),hasPrevious()

​ Collection顶层结构接口是Iterable,而Map的顶层接口是Map,Collection下的集合都可以用迭代器遍历,Map可以使用Set<Map.Entry<K, V>> entrySet()方法转换为Set进行迭代遍历。

​ Iterable中包含Iterator<T> iterator()方法,Collection下集合使用该方法后会返回迭代器,可对迭代器进行迭代遍历。

​ 通常来讲有序的集合中有Iterator<T> iterator()ListIterator<E> listIterator()方法,可以进行双向遍历,无序的集合中有Iterator<T> iterator(),只能向后遍历。

四、实现自己的集合

​ 如果想实现自己的集合可以JDK提供的抽象类,如AbstractList,AbstractMap,通常这些抽象类已经为我们提供了现成的实现,可以根据需要对特定的抽象方法重写,直接实现List、Map这样的接口是需要实现所有方法工作量过大。

​ 不过通常来讲,java已经提供提供了丰富的集合实现,很少会需要我们自己去实现集合。


本文参考:

  1. Think in Java 第四版 第8章 集合部分
  2. Java 集合详解
  3. 一张图让你看清Java集合类(Java集合类的总结)
0%