Java第十二章课堂总结

集合类

1.集合类概述

集合类与数组的不同之处是:数组的长度是不变的,集合的长度是可变的;数组用来存放基本类型,集合用来存放对象的引用。

常见的集合有List集合、Set集合和Map集合,其中List集合与Set集合继承了Collection接口,各接口还提供了不同的实现类。

2.Collection接口

Collection接口是层次结构中的根接口,构成Collection的单位被称为元素。Collection接口通常不能直接使用,但该接口提供了添加元素、删除元素、管理数据的方法。由于List接口与Set接口都继承了Collection接口,因此这些方法对lList集合与Set集合是通用的。

通常遍历集合,都是通过迭代器(Iterator)来实现。。Collection 接口中的iterator()方法可返回在此 Collection 进行迭代的迭代器。

例题12.1

3.List集合

List 集合包括 List 接口以及 List 接口的所有实现类。List 集合中的元素允许重复,各元素的顺序数是对象插入的顺序。类似 Java 数组,用户可通过使用索引(元素在集合中的位置)来访网集合中的元素。

(1)List接口

List 接口继承了 Collection 接口,因此包含 Collection 接口中的所有方法。此外,List 接口还定义了以下两个非常重要的方法:

①get(intindex):获得指定索引位置的元素。
②set(intindex,Object obj): 将集合中指定索引位置的对象修改为指定的对象。

 (2)List 接口的实现类

List接口的常用实现类有ArrayList类与 LinkedList 类,简述如下:

①ArrayList类实现了可变的数组,允许保存所有元素,包括 null,并可以根据索引位置对集台进行快速的随机访问。缺点是向指定的索引位置插入对象或删除对象的速度较慢。

②LinkedList类采用链表结构保存对象。这种结构的优点是便于向集合中插入和删除对象。需要向集合中插入、删除对象时,使用 LinkedList 类实现的 List 集合的效率软高:但对于随机访问集合中的对象,使用 LinkedList 类实现 List 集合的效率较低。使用 List 集合时通常声明为 List 类型,可通过不同的实现类来实例化集合。

通过 AayLis 类、LamkedLst 类分别实例化 List 集合的代码如下:

List<E> list = new ArrayList<>();

Lst<E> list = new LinkedList<>();

 在上面的代码中,E 可以是合法的 Java 数据类型。例如,如果集合中的元素为字符串类型,那么E可以修改为String。

例题12.2

4.Set 集合

Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合中,但 Set 集合中不能包含重复对象。Set 集合由 Set 接口和 Set 接口的实现类组成。Set 接口继承了 Collection 接口,因此包含 Collection接口的所有方法。

误区警示!!!

Set 集合的构造有一个约束条件,传入的 Collection 对象不能有重复值,必须小心操作可变对象(Mutable Object)。如果一个 Set 集合中的可变元素改变了自身状态导致 Object.equals(Object)tue,则会出现一些问题。

Set 接口常用的实现类有 HashSet 类与 TreeSet 类,简述如下:

①HashSet 类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 Set 集合的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

②TreeSet 类不仅实现了 Set 接口,还实现了 java.util.SortedSet 接口,因此 TreeSet 类实现的 Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,即可以通过比Q较器对用 TreeSet 类实现的 Set 集合中的对象进行排序。

 

例题12.3 

 5.Map 集合

Map 集合没有继承 Collection 接口,其提供的是 key 到 value 的映射。Map 集合中不能包含相同的ky每个key只能映射一个value。 key 还决定了存储对象在映射中的存储位置,但不是由 key对象身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值。散列码通常用作一个作移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括 Map 接口以及 Map 接口的所有实现类。

(1)Map接口

Map 接口提供了将 key 映射到值的对象。一个映射不能包含重复的 key,每个 key 最多只能映射到个值。除集合的常用方法外,Map 接口还提供了如表 12.3 所示的特殊方法。

(2)Map 接口的实现类

Map 接口常用的实现类有 HashMap 类和 TreeMap 类,简述如下:

①HashMap 类是基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用null 值和 null 键,但必须保证键的唯一性。HashMap 类通过哈希表对其内部的映射关系进行快速查找。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
②TreeMap 类不仅实现了 Map 接口,还实现了javautil.SortedMap 接口,因此集合中的映射关系<具有一定的顺序。但在添加、删除和定位映射关系时,TreeMap 类比 HashMap 类性能稍差。由于 TreeMap 类实现的 Map 集合中的映射关系是根据键对象按照一定的顺序排列的,因此不允许键对象是 null。

 建议使用 HashMap 类实现 Map 集合,因为由 HashMap 类实现的 Map 集合添加和删除映射关系效率更高。可以通过 HashMap 类创建 Map 集合,当需要顺序输出时,再创建一个完成相同映射关系的TreeMap 类实例。

例题12.4

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值