Java集合详解

在编程时,可以使用数组来保存多个对象,但数组长度不可变化,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的。如果需要保存数量变化的数据,数组就有点无能为力了。而且数组无法保存具有映射关系的数据,如成绩表为语文——79,数学——80,这种数据看上去像两个数组,但这两个数组的元素之间有一定的关联关系。

为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),Java提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。Java所有的集合类都位于java.util包下,提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类和操作它们的算法。

集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),而集合里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为集合里保存的是对象)。

Java集合类型分为Collection和Map,它们是Java集合的根接口,这两个接口又包含了一些子接口或实现类。图1和图2分别为Collection和Map的子接口及其实现类。

Map接口结构

在图1和图2中,黄色块为集合的接口,蓝色块为集合的实现类。表1介绍了这些接口的作用。

表1Java集合接口的作用

接口名称 作    用
Iterator 接口

集合的输出接口,主要用于遍历输出(即迭代访问)Collection 集合中的元素,I

terator 对象被称之为迭代器。迭代器接口是集合接口的父接口,实现类实现 Collection 时就必须实现 Iterator 接口。

Collection 接口

是 List、Set 和 Queue 的父接口,是存放一组单值的最大接口。

所谓的单值是指集合中的每个元素都是一个对象。一般很少直接使用此接口直接操作。

Queue 接口 Queue 是 Java 提供的队列实现,有点类似于 List。
Dueue 接口 是 Queue 的一个子接口,为双向队列。
List 接口

是最常用的接口。是有序集合,允许有相同的元素。

使用 List 能够精确地控制每个元素插入的位置,用户能够使用索引(元素在 List 中的位置,类似于数组下标)来访问 List 中的元素,与数组类似。

Set 接口 不能包含重复的元素。
Map 接口 是存放一对值的最大接口,即接口中的每个元素都是一对,以 key➡value 的形式保存。

对于Set、List、Queue和Map这4种集合,Java最常用的实现类分别是HashSet、TreeSet、ArrayList、ArrayDueue、LinkedList和HashMap、TreeMap等。表2介绍了集合中这些常用的实现类。

表2Java集合实现类的作用

 
类名称 作用
HashSet 为优化査询速度而设计的 Set。它是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,实现比较简单
TreeSet 实现了 Set 接口,是一个有序的 Set,这样就能从 Set 里面提取一个有序序列
ArrayList 一个用数组实现的 List,能进行快速的随机访问,效率高而且实现了可变大小的数组
ArrayDueue 是一个基于数组实现的双端队列,按“先进先出”的方式操作集合元素
LinkedList

对顺序访问进行了优化,但随机访问的速度相对较慢。

此外它还有 addFirst()、addLast()、getFirst()、getLast()、removeFirst() 和 removeLast() 等方法,能把它当成栈(Stack)或队列(Queue)来用

HsahMap 按哈希算法来存取键对象
TreeMap 可以对键对象进行排序
(0)

相关推荐

  • Java集合

    集合类存放在java.util包中,主要有三种:set(集),list(列表包括Queue)和map(映射). Collection:Collection是集合List.Set.Queue的最基本的接 ...

  • Java泛型详解:<T>和Class<T>的使用。泛型类,泛型方法的详细使用实例

    一.引入1.泛型是什么首先告诉大家ArrayList就是泛型.那ArrayList能完成哪些想不到的功能呢?先看看下面这段代码:[java] view plain copyArrayList<S ...

  • Java字符串详解

    字符串即字符的组合,在Java中,字符串是一个类,所以我们见到的字符串都是对象. 常见创建字符串手段: 每当有一个字面值出现的时候,JVM虚拟机就会创建一个字符串 调用String的构造方法创建一个字 ...

  • 3W 字详解 Java 集合

    开源前哨 93篇原创内容 公众号 数据结构作为每一个开发者不可回避的问题,而 Java 对于不同的数据结构提供了非常成熟的实现,这一个又一个实现既是面试中的难点,也是工作中必不可少的工具,在此,笔者经 ...

  • 《新闻学概论》第六版知识点详解!考点大集合| 99阿蒋

    朋友们! 晴天一声雷! 前两天99阿蒋还在说新闻学概论的知识有些老旧 啪嗒一下 李良荣老师就带来了 <新闻学概论>第六版 还没有拿到第六版的同学 ↓先戳这里↓ 突然出现的<新闻学概论 ...

  • “动词 介词/副词”类短语集合(附练习题及答案详解)!

    △同一动词+不同介词/副词 come短语 come across (偶然)遇见(或发现) come along (意外地)出现:发生:来到 come down 降落 come from 来自 come ...

  • JAVA中常见的阻塞队列详解

    在之前的线程池的介绍中我们看到了很多阻塞队列,这篇文章我们主要来说说阻塞队列的事. 阻塞队列也就是 BlockingQueue ,这个类是一个接 口,同时继承了 Queue 接口,这两个接口都是在JD ...

  • Java中的多态详解

    一.多态的概念 多态分为类的多态和方法的多态,类的多态就是一个类型可以有不同的表现形态,什么样的类型才会具备多态呢?只有被多个子类继承或者实现的父类才具备多态的特征,因为在运行期间可以根据具体的子类表 ...

  • Java并发之AQS详解

    一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQ ...

  • Java中方法的重载详解(含系统配套视频)

    一.方法的概念 在之前我们学习了方法的定义,方法实现指定功能的代码块的组合,基本的定义 如下: 访问修饰符[static] 返回值类型[如果不需要返回值使用void]方法名(参数类型 参数名,参数类型 ...