第三节 Java 集合框架

作者 : 开心源码 本文共2544个字,预计阅读时间需要7分钟 发布时间: 2022-05-12 共173人阅读

1 .集合框架的详情

我们在超市买东西的时候,假如没有购物车是不是会很麻烦呢?Java 中集合类是一种工具类,就是像购物车一样的容器,存储任意数量的具备共同属性的对象。

我们为什么要用集合呢?一个类的内部有许多相同类型的属性,并且他们的作用与意义是一样的,我们最好用一个相似容器的东西去盛放他们,在类的内部就变得井然有序。所以集合便是在类的内部,对数据进行组织的作用。这样我们便可以简单而快速地搜索大量的条目。有的集合接口,提供了一系列排列有序的元素,并且可以在序列中快速地插入或者者删除有关元素。还有少量集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型。

集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大内容:对外的接口、接口的实现和对集合运算的算法。

下图是简化的集合框架关系图:

2 .接口

2.1 Collection 接口

由于集合框架中的很多类功能是类似的,所以我们用接口来规范类。Collection 接口是 java 集合框架里的一个根接口。它也是 List、Set 和 Queue 接口的父接口。Collection 接口中定义了可用于操作 List、Set 和 Queue 的方法——增删改查。

2.2 Map 接口

Map 接口也是一个非常重要的集合接口,用于存储键/值对。Map 中的元素都是成对出现的,键值对就像数组的索引与数组的内容的关系一样,将一个键映射到一个值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。我们可以通过键去找到相应的值。

value 可以存储任意类型的对象,我们可以根据 key 键快速查找 value。Map 中的键/值对以 Entry 类型的对象实例形式存在。

看一看 Map 中的方法吧

3 .具体类

3.1 List 接口与 ArrayList 类

List 是一个接口,不能实例化,需要一个具体类来实现实例化。List 集合中的对象按照肯定的顺序排放,里面的内容可以重复。 List 接口实现的类有:ArrayList(实现动态数组),Vector(实现动态数组),LinkedList(实现链表),Stack(实现堆栈)。

List 在 Collection 基础上添加的方法:

方法返回值说明

add(int index, E element)void在列表的指定位置插入指定元素(可选操作)

addAll(int index, Collection<? extends E> c)boolean将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)

get(int index)E返回列表中指定位置的元素

indexOf(Object o)int返回此列表中第一次出现的指定元素的索引;假如此列表不包含该元素,则返回 -1

lastIndexOf(Object o)int返回此列表中最后出现的指定元素的索引;假如列表不包含此元素,则返回 -1

listIterator()ListIterator返回此列表元素的列表迭代器(按适当顺序)

listIterator(int index)ListIterator返回此列表元素的列表迭代器(按适当顺序),从列表的指定位置开始

remove(int index)E移除列表中指定位置的元素(可选操作)

set(int index, E element)E用指定元素替换列表中指定位置的元素(可选操作)

subList(int fromIndex, int toIndex)List返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图

今天我们主要来学习 java.util.ArrayList,ArrayList 类实现一个可增长的动态数组,它可以存储不同类型的对象,而数组则只能存放特定数据类型的值。

我们通过实际的例子来学习ArrayList吧!学校的教务系统会对学生进行统一的管理,每一个学生都会有一个学号和学生姓名,我们在维护整个系统的时候,大多数操作是对学生的增加、插入、删除、修改等操作。

先创立一个学生类:

再创立一个学生列表,来管理学生

结果:

在上面的代码中,用到了 Arrays 类, Arrays 包含用来操作数组(比方排序和搜索)的各种方法,asList() 方法用来返回一个受指定数组支持的固定大小的列表。

List 有两种基本的类型,除了 ArrayList 外,还有 LinkedList,LinkedList 类用于创立链表数据结构,两者的比照如下:

ArrayList:它擅长于随机访问元素,但是插入和移除元素时较慢。

LinkedList:它通过代价较低的在 List 中进行插入和删除操作,提供了优化的顺序访问,它在随机访问方面相对较慢,但是它的特性集较 ArrayList 更大。

3.2 Set 接口和 HashSet 类

Set接口也是 Collection 接口的子接口,它有一个很重要也是很常用的实现类——HashSet,Set 是元素无序并且不包含重复元素的 collection(List 可以重复),被称为集。

HashSet 由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。

接下来我们同样通过代码的形式来详细看一看吧!

在上面我们实现了学生的管理,现在学生要做项目,每个项目有一个组长,由组长来组织组员,我们便来实现项目组的管理吧。(接上面的程序实例)

由于项目组的组长由一个老师担任,首先我们来创立一个 PD 类

接下来我们便创立一个SetTest 类,用来管理项目成员

结果:

3.3 HashMap 类

HashMap 是基于哈希表的 Map 接口的一个重要实现类。HashMap 中的 Entry 对象是无序排列的,Key 值和 value 值都可以为 null,但是一个 HashMap 只能有一个 key 值为 null 的映射(key 值不可重复)。

下面我们通过代码来学习 Map 中的方法吧。同学们都有过选课经历吧,我们就用 Map 来管理课程吧。

创立一个 Course 类:

创立一个 MapTest 类:

结果:

欢迎关注微信公众号:Java的学习之路

里面资料非常全,从java初级到高级都有,视频,电子书,面试宝典,简历模板,经典案例,源码分析程序员故事以及处理bug方法。。。。应有尽有,可以推荐大家一起学习下!!

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 第三节 Java 集合框架

发表回复