Java入门经典第9章集合类及项目习题答案.pdf_第1页
Java入门经典第9章集合类及项目习题答案.pdf_第2页
Java入门经典第9章集合类及项目习题答案.pdf_第3页
Java入门经典第9章集合类及项目习题答案.pdf_第4页
Java入门经典第9章集合类及项目习题答案.pdf_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 188 第第 9 9 章章 集合类集合类 学习学习 Java 语言语言,就必须学习如何使用就必须学习如何使用 Java 的集合类的集合类。Java 的集合类就像一个容器的集合类就像一个容器,用来存用来存 放放 Java 类的对象类的对象。有些容器内部存放的东西在容器内部是不可能操作的有些容器内部存放的东西在容器内部是不可能操作的,如水桶里面装的水如水桶里面装的水, 除了将其装入和除了将其装入和倒出之外倒出之外,就不能再进行别的操作了就不能再进行别的操作了,但是很容易装入和倒出但是很容易装入和倒出,而有些容器内部而有些容器内部 存放的东西在容器内部则是可操作的存放的东西在容器内部则是可操作的,如衣柜里面摆放的衣服如衣柜里面摆放的衣服,不仅可以将衣服存放到衣柜中不仅可以将衣服存放到衣柜中, 还可以将衣服有序地摆放还可以将衣服有序地摆放,以便在使用时快速地查找以便在使用时快速地查找,但是却不容易取出但是却不容易取出,像那些存放在柜子底像那些存放在柜子底 部的衣服部的衣服。Java 的集合类也是如此的集合类也是如此,有些是方便放入和取出的有些是方便放入和取出的,而有些又是方便查找的而有些又是方便查找的。 通过本章的学习通过本章的学习,希望读者可以达到以下的学习目的希望读者可以达到以下的学习目的: 了解什么是集合类了解什么是集合类。 掌握掌握 Collection 集合中的常用方法集合中的常用方法。 掌握掌握 List 集合的特点集合的特点。 掌握掌握 Set 集合的特点集合的特点。 掌握掌握 Map 集合的特点集合的特点。 学会灵活地使用各种集合学会灵活地使用各种集合。 9.1 9.1 集合类概述集合类概述 java.util 包中提供了一些集合类包中提供了一些集合类, 常用的有常用的有 List、 Set 和和 Map, 其中其中, List 和和 Set 继承继承 Collection 接口接口。这些集合类又称为容器这些集合类又称为容器,它们与数组不同它们与数组不同,数组的长度是固定的数组的长度是固定的,集合的长度是可变的集合的长度是可变的, 数组用来存放基本类型的数据数组用来存放基本类型的数据,集合用来存放类对象的引用集合用来存放类对象的引用。 List 接口接口、Set 接口接口、Map 接口及接口及 Collection 接口的主要特征如下接口的主要特征如下。 Collection 接口是接口是 List 接口和接口和 Set 接口的父接口接口的父接口,通常情况下不被直接使用通常情况下不被直接使用。 List 接接口继承自口继承自 Collection 接口接口,List 接口允许存放重复的对象接口允许存放重复的对象,排序方式按照对象的插排序方式按照对象的插 入顺序入顺序。 Set 接口继承自接口继承自 Collection 接口接口,Set 接口不允许存放重复的对象接口不允许存放重复的对象,排序方式按照自身内排序方式按照自身内 部的排序规则部的排序规则。 Map 接口以键值对接口以键值对(key-value)的形式存放对象的形式存放对象,其中其中,键键(key)对象不可以重复对象不可以重复,值值 (value)对象可以重复对象可以重复,排序方式按照自身内部的排序规则排序方式按照自身内部的排序规则。 上述集合类的继承关系如图上述集合类的继承关系如图 9.1 所示所示。 Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 189 9.2 Collection9.2 Collection 接口的常用方法接口的常用方法 Collection 接口是接口是 List 接口和接口和 Set 接口的父接口接口的父接口, 通常情况下不被直接使用通常情况下不被直接使用, 不过不过, Collection 接口定义了一些通用的方法接口定义了一些通用的方法,通过这些方法可以实现对集合的基本操作通过这些方法可以实现对集合的基本操作,因为因为 List 接口和接口和 Set 接接 口继承自口继承自 Collection 接口接口,所以这些方法对所以这些方法对 List 集合和集合和 Set 集合是通用的集合是通用的。下面介绍下面介绍 Collection 接口中常用的方法接口中常用的方法。 9.2.1 addAll()9.2.1 addAll()方法方法 addAll()方法将指定方法将指定 Collection 中的所有元素都添加到此中的所有元素都添加到此 Collection 中中。 如果在进行此操作的如果在进行此操作的 同时修改了指定的同时修改了指定的 Collection,那么将不能保证此操作的正确性那么将不能保证此操作的正确性。 【例例 9.1】 在项目中创建类在项目中创建类 TestCollection,在该类的主方法中定义在该类的主方法中定义 Collection 集合集合,并通过并通过 add()方法向集合中添加方法向集合中添加 String 类型对象类型对象, 通过通过 addAll()方法将该集合中的所有对象都添加到另一方法将该集合中的所有对象都添加到另一 个个 Collection 集合中集合中。 实例位置实例位置:光盘光盘MR源码源码第第 9 章章9.1 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class P193TestCollection public static void main(String args) String apple = “apple“; String banana = “banana“; String pear = “pear“; Collection list =new ArrayList(); list.add(apple);/通过通过add()方法添加指定对象到集合中方法添加指定对象到集合中 list.add(banana); Collection list2=new ArrayList(); /通过通过addAll()方法添加指定集合中的所有对象到该集合中方法添加指定集合中的所有对象到该集合中 list2.addAll(list); list2.add(pear); Iterator it = list2.iterator(); /通过通过iterator()方法序列化集合中的所有对象方法序列化集合中的所有对象 while(it.hasNext() String str = it.next().toString();/获取集合中的各个元素获取集合中的各个元素 System.out.println(str);/将元素输出将元素输出 注意注意 由于由于 CollectionCollection 是接口是接口,因此不能对其实例化因此不能对其实例化,因为因为 ArrayListArrayList 类是类是 CollectionCollection 接口的接口的 间接实现类间接实现类,所以通过所以通过 ArrayListArrayList 类实例化类实例化。 执行上面的代码执行上面的代码,运行结果如图运行结果如图 9.2 所示所示。 Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 190 图图 9.2 9.2 【例例 9.19.1】的运行结果的运行结果 从图从图 9.3 中可以看出中可以看出 addAll()方法的执行过程方法的执行过程。 9.2.2 removeAll()9.2.2 removeAll()方法方法 从指定的集合中移除包含在另一个集合中的元素从指定的集合中移除包含在另一个集合中的元素,返回值为返回值为 boolean 类型类型,如果包含要移除如果包含要移除 的对象则返回的对象则返回 true,否否则返回则返回 false。 【例例 9.2】 在项目中创建类在项目中创建类 TestCollection, 在该类的主方法中定义在该类的主方法中定义 Collection集合集合 list与与 list2, 并分别向这两个集合添加并分别向这两个集合添加 String 类型对象类型对象。 实例位置实例位置:光盘光盘MR源码源码第第 9 章章9.2 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class P194TestCollection public static void main(String args) String a = “上海路上海路“,b=“人们大街人们大街“,c=“长春大街长春大街“;/定义定义String对象对象 Collection list = new ArrayList();/定义定义Collection集合对象集合对象 list.add(a); list.add(b); Collection list2 = new ArrayList(); /定义定义Collection集合对象集合对象 list2.add(b); /向集合中添加对象向集合中添加对象 list2.add(c); boolean isContains = list.removeAll(list2); /从集合中移除同时包含在另一个集合中的元素从集合中移除同时包含在另一个集合中的元素 System.out.println(“集合集合list与与list2是否包含有重复元素是否包含有重复元素:“+isContains); Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 191 Iterator it = list.iterator();/创建集合的迭代器创建集合的迭代器 System.out.print(“执行执行removeAll()方法后方法后list集合中的元素集合中的元素:“); while (it.hasNext() String str = it.next(); System.out.print(“ “+str+“ “);/输出集合中的元素输出集合中的元素 运行本例运行本例,结果如图结果如图 9.4 所示所示。 本实例的执行顺序如图本实例的执行顺序如图 9.5 所示所示。 9.2.3 retainAll()9.2.3 retainAll()方法方法 retainAll()方法仅保留该集合中同时包含在指定集合中的对象方法仅保留该集合中同时包含在指定集合中的对象,其他的全部移除其他的全部移除,与与 removeAll()方法正好相反方法正好相反。返回值为返回值为 boolean 型型,如果存在符合移如果存在符合移除条件的对象则返回除条件的对象则返回 true,否否 则返回则返回 false。 【例例 9.3】 在项目中创建类在项目中创建类 TestCollection,在该类的主方法中定义两个在该类的主方法中定义两个 Collection 集合集合,并并 分别向这两个集合中添加对象分别向这两个集合中添加对象,使用使用 retainAll()方法保留在集合方法保留在集合 1 中与集合中与集合 2 中都存在的对象中都存在的对象。 实例位置实例位置:光盘光盘MR源码源码第第 9 章章9.3 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 192 public class P195TestCollection public static void main(String args) String a=“上海路上海路“,b=“长春大街长春大街“,c=“北京大街北京大街“;/定义定义String类型对象类型对象 Collection list = new ArrayList();/创建创建Collection对象对象 list.add(a); /向集合中添加对象向集合中添加对象 list.add(b); Collection list2 = new ArrayList();/创建集合对象创建集合对象 list2.add(b); list2.add(c); boolean isContains = list.retainAll(list2); /保留保留list集合中同时包含正在集合中同时包含正在list2中的元素中的元素 System.out.println(“集合集合list与与list2是否包含有重复元素是否包含有重复元素:“+isContains); System.out.println(“执行执行retainAll方法后方法后List集合中的元素为集合中的元素为:“); Iterator it = list.iterator();/创建集合迭代器创建集合迭代器 while (it.hasNext() /循环遍历迭代器循环遍历迭代器 String str =it.next();/获取集合中对象获取集合中对象 System.out.print(“ “+str+“ “);/将对象输出将对象输出 运行程序运行程序,由于由于 list 与与 list2 都包含对象都包含对象“长春大街长春大街” ,因此执行因此执行 retainAll()方法的结果如图方法的结果如图 9.6 所示所示。 图图 9.6 9.6 【例例 9.39.3】的运行结果的运行结果 从图从图 9.7 中可以更加清楚地看到两个集合执行中可以更加清楚地看到两个集合执行 retainAll()方法的返回值方法的返回值。 Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 193 9.2.4 containsAll()9.2.4 containsAll()方法方法 containsAll()方法用来查看在该集合中是否存在指定集合中的所有对象方法用来查看在该集合中是否存在指定集合中的所有对象,返回值为返回值为 boolean 型型,如果存在则返回如果存在则返回 true,否则返回否则返回 false。 【例例 9.4】 在项目中创建类在项目中创建类 TestCollection,在该类中定义两个在该类中定义两个 Collection 集合集合,分别向这两分别向这两 个集合中添加个集合中添加 String 类型对象类型对象, 通过调用哪个通过调用哪个 containssAll()方法判断指定的集合中是否包含另一方法判断指定的集合中是否包含另一 个集合中的全部对象个集合中的全部对象。 实例位置实例位置:光盘光盘MR源码源码第第 9 章章9.4 import java.util.ArrayList; import java.util.Collection; public class P196TestCollection public static void main(String args) String a= “长春大街长春大街“,b=“人民大街人民大街“,c=“解放大路解放大路“;/定义定义String对象对象 Collection list =new ArrayList();/定义定义Collection集合对象集合对象 list.add(a);/向集合中添加对象向集合中添加对象 list.add(b); Collection list2 = new ArrayList();/定义定义Collection集合对象集合对象 list2.add(b);/向集合中添加对象向集合中添加对象 list2.add(c); boolean isContains = list.containsAll(list2);/调用调用containsAll()方法方法 System.out.println(“集合对象集合对象list中是否包含集合中是否包含集合对象对象list2中所有对象中所有对象:n“+isContains); 上面的代码中上面的代码中,集合对象集合对象 list 中包含字符串对象中包含字符串对象“长春大街长春大街” 、 “人民大街人民大街” ,集合对象集合对象 list2 中包含字符串对象中包含字符串对象“人民大街人民大街”与与“解放大街解放大街” ,list 中不包含中不包含 list2 中的全部对象中的全部对象,因此因此,运行结运行结 果如图果如图 9.8 所示所示。 图图 9.8 9.8 【例例 9.49.4】的运行结果的运行结果 9.2.5 toArray()9.2.5 toArray()方法方法 如果要将一个集合转变为数组形式如果要将一个集合转变为数组形式,可以使用可以使用 Collection 接口的接口的 toArray()方法方法。toArray() 方法用来获得一个包含所有对象的指定类型的数组方法用来获得一个包含所有对象的指定类型的数组。toArray()方法的入口参数必须为数组类型的方法的入口参数必须为数组类型的 实例实例,并且必须已经被初始化并且必须已经被初始化,它的作用是用来指定欲获得数组的类型它的作用是用来指定欲获得数组的类型。 Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 194 【例例 9.5】 在项目中创建类在项目中创建类 TestCollection,在该类的主方法中定义在该类的主方法中定义 Collection 集合集合,并向集并向集 合中添加合中添加 String 类型对象类型对象,通过通过 toArray()方法输出数组方法输出数组。 实例位置实例位置:光盘光盘MR源码源码第第 9 章章9.5 import java.util.ArrayList; import java.util.Collection; public class P197TestCollection public static void main(String args) String str1=“长春大街长春大街“,str2=“远达大桥远达大桥“,str3=“美蓉桥美蓉桥“; /定义字符串对象定义字符串对象 Collection list = new ArrayList(); /定义定义Collection集合对象集合对象 list.add(str1); list.add(str2); list.add(str3); Object strs2 = list.toArray(); /通过通过toArray()方法获得一个包含所有对象的指定类型的数组方法获得一个包含所有对象的指定类型的数组 for(int i=0;i 1 = new ArrayList();/利用利用 ArrayList 类实例化类实例化 List 集合集合 List 12 = new LinkdeList();/利用利用 LinkedList 类实例化类实例化 List 集合集合 1.add(int index,Object obj)方法和方法和 set(int index,Object obj)方法的区别方法的区别 【例例 9.6】 在使用在使用 List 集合时集合时,需要注意区分需要注意区分 add(int index,Object obj)方法和方法和 set(int index,Object obj)方法方法,前者是向指定索引位置添加对象前者是向指定索引位置添加对象,而后者是修改指定索引位置的对象而后者是修改指定索引位置的对象。 实例位置实例位置:光盘光盘MR源码源码第第 9 章章9.6 import java.util.Iterator; Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 196 import java.util.LinkedList; import java.util.List; public class P199TestCollection public static void main(String args) String a = “人民大街人民大街“,b=“解放大路解放大路“,c=“儿童公园儿童公园“,d=“新民广场新民广场“,e=“火车站火车站“; List list = new LinkedList();/定义集合对象定义集合对象 list.add(a); list.add(e); list.add(d); Iterator itList = list.iterator(); /创建集合迭代器创建集合迭代器 System.out.println(“集合中的对象集合中的对象:“); while (itList.hasNext() System.out.print(“ “+itList.next()+“ “); list.set(1, b); /将索引位置为将索引位置为1的对象的对象e修改为对象修改为对象b list.add(2,c);/将对象将对象c添加到索引位置为添加到索引位置为2的位置的位置 Iterator it = list.iterator(); /创建集合迭代器创建集合迭代器 System.out.println(“n修改后的集合中的对象修改后的集合中的对象:“); while (it.hasNext() System.out.println(“ “+it.next()+“ “);/输出集合中的对象输出集合中的对象 运行程序运行程序,结果如图结果如图 9.10 所示所示。 图图 9.10 9.10 【例例 9.69.6】的运行结果的运行结果 2.indexOf(Object obj)2.indexOf(Object obj)方法和方法和 lastindexOf(Object obj)lastindexOf(Object obj)方法的区别方法的区别 【例例 9.7】 在使用在使用 List 集合集合时时, 需要注意区分需要注意区分 indexOf (Object obj) 方法和方法和 lastIndexOf(Object obj)方法方法。前者是获得指定对象的最小索引位置前者是获得指定对象的最小索引位置,而后者是获得指定对象的最大索引位置而后者是获得指定对象的最大索引位置。前提前提 条件是指定的对象在条件是指定的对象在 List 集合中具有重复的对象集合中具有重复的对象, 否则如果在否则如果在 List 集合中有且仅有一个指定的对集合中有且仅有一个指定的对 象象,则通过这两个方法获得的索引位置是相同的则通过这两个方法获得的索引位置是相同的。 实例位置实例位置:光盘光盘MR源码源码第第 9 章章9.7 import java.util.ArrayList; import java.util.List; Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 197 public class P200TestCollection public static void main(String args) String a= “A“,b=“B“,c=“C“,d=“D“,repeat=“Repeat“; List list = new ArrayList();/定义集合对象定义集合对象 list.add(a); /索引位置为索引位置为0 list.add(repeat);/索引位置为索引位置为1 list.add(b); /索引位置为索引位置为2 list.add(repeat);/索引位置为索引位置为3 list.add(c); /索引位置为索引位置为4 list.add(repeat);/索引位置为索引位置为5 list.add(d); /索引位置为索引位置为6 System.out.println(“对象对象repeat第一次出现的索引位置第一次出现的索引位置:“+list.indexOf(repeat); System.out.println(“对象对象repeat最后一次出现的索引位置最后一次出现的索引位置:“+list.lastIndexOf(repeat); System.out.println(“对象对象b第一次出现的索引位置第一次出现的索引位置:“+list.indexOf(b); System.out.println(“对象对象b最后一次出现的索引位置最后一次出现的索引位置:“+list.lastIndexOf(b); 本例的运行结果如图本例的运行结果如图 9.11 所示所示。 图图 9.11 9.11 【例例 9.79.7】的运行结果的运行结果 3.subList(int fromIndex,int toIndex)3.subList(int fromIndex,int toIndex)方法方法 【例例 9.8】 在使用在使用 subList(int fromIndex,int toIndex)方法截取现有方法截取现有 List 集合中的部分对象生集合中的部分对象生 成新的成新的 List 集合时集合时,需要注需要注意的是意的是,新生成的集合中包含起始索引位置代表的对象新生成的集合中包含起始索引位置代表的对象,但是不包含但是不包含 终止索引位置代表的对象终止索引位置代表的对象。 实例位置实例位置:光盘光盘MR源码源码第第 9 章章9.8 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class P201TestCollection public static void main(String args) String a=“一年一班一年一班“,b=“一年二班一年二班“,c=“一年三班一年三班“,d=“一年四班一年四班“,e=“一年五班一年五班“; List list = new ArrayList();/定义集合对象定义集合对象 Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 198 list.add(a);/索引位置为索引位置为0 list.add(b);/索引位置为索引位置为1 list.add(c);/索引位置为索引位置为2 list.add(d);/索引位置为索引位置为3 list.add(e);/索引位置为索引位置为4 Iterator it = list.iterator();/创建集合迭代器创建集合迭代器 System.out.println(“集合中的元素为集合中的元素为:“); while (it.hasNext() /循环遍历迭代器循环遍历迭代器 System.out.print(“ “+it.next()+“ “);/输出集合中的对象输出集合中的对象 list =list.subList(1, 3);/利用从索引位置利用从索引位置1到到3的对象重新生成一个的对象重新生成一个List集合集合 System.out.println(“n截取集合后的元素为截取集合后的元素为:“); for (int i=0;i it2 = list.iterator();/创建集合迭代器创建集合迭代器 System.out.println(“n截取集合后的元素为截取集合后的元素为:“); while (it2.hasNext() /循环遍历迭代器循环遍历迭代器 System.out.print(“ “+it2.next()+“ “);/输出集合中的对象输出集合中的对象 运行程序运行程序,结果如图结果如图 9.12 所示所示。 图图 9.12 9.12 【例例 9.89.8】的运行结果的运行结果 9.4 Set9.4 Set 集合集合 Set 集合为集类型集合为集类型,集是最简单的一种集合集是最简单的一种集合,存放于集中的对象不按特定方式排序存放于集中的对象不按特定方式排序,只是简只是简 单地把对象加入到集合中单地把对象加入到集合中,类似于向口袋里放东西类似于向口袋里放东西。对集中对象的访问等操作是通过对象的引用对集中对象的访问等操作是通过对象的引用 进行的进行的,所以在集中不能存放重复对象所以在集中不能存放重复对象。Set 包括包括 Set 接口及接口及 Set 接口的所有实现类接口的所有实现类。因为因为 Set 接接 口继承了口继承了 Collection 接口接口,所以所以 Set 接口拥有接口拥有 Collection 接口提供的所有常用方法接口提供的所有常用方法。 9.4.1 9.4.1 使用使用 HashSetHashSet 类类 由由 HashSet 类实现的类实现的 Set 集合的优点是能够快速定位集合中的元素集合的优点是能够快速定位集合中的元素。 由由 HashSet 类类实现的实现的 Set 集合中的对象必须是唯一的集合中的对象必须是唯一的,所以需要添加到由所以需要添加到由 HashSet 类实现的类实现的 Set 集合中的对象需要重新实集合中的对象需要重新实 现现 equals()方法方法,从而保证插入集合中对象的标识符的唯一性从而保证插入集合中对象的标识符的唯一性。 Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 199 Set 集合中的对象是无序的集合中的对象是无序的,这里所谓的无序并不是完全无序这里所谓的无序并不是完全无序,只是不像只是不像 List 集合按对象的集合按对象的 插入顺序保存对象插入顺序保存对象。例如例如,在下面的例子中在下面的例子中,遍历集合输出对象的顺序与向集合插入对象的顺序遍历集合输出对象的顺序与向集合插入对象的顺序 并不相同并不相同。 【例例 9.9】新建一个新建一个 Person 类类,该类需要重新实现该类需要重新实现 equals(Object obj)方法和方法和 hashCode()() 方法方法,以保证对象标识的唯一性和存储分布的合理性以保证对象标识的唯一性和存储分布的合理性。 实例位置实例位置:光盘光盘MR源码源码第第 9 章章9.9 import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class P202Person private String name; private long id_card; public P202Person(String name,long id_card) =name; this.id_card=id_card; public int hashCode() final int PRIME=31; int result=1; result =PRIME*result+(int) (id_card(id_card32); result =PRIME*result+(name=null)?0:name.hashCode(); return result; public boolean equals(Object obj)/实现实现equals()方法方法 if(this=obj) return true; if(obj=null) return false; if(getClass()!=obj.getClass() return false; final P202Person other=(P202Person) obj; if(id_card!=other.id_card) return false; if(name=null) if(!=null) return false; else if(!name.equals() return false; return true; public static void main(String args) Set hashSet=new HashSet();/定义定义Set集合对象集合对象 hashSet.add(new P202Person(“马先生马先生“,220181);/向集合中添加对象向集合中添加对象 Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 200 hashSet.add(new P202Person(“李先生李先生“,220186); hashSet.add(new P202Person(“王小姐王小姐“,220193); Iterator it = hashSet.iterator();/获取集合迭代器获取集合迭代器 while (it.hasNext() /循环遍历集合循环遍历集合 P202Person person =it.next();/获取集合对象获取集合对象 System.out.println(+“ “+person.id_card); /将对象的信息输出将对象的信息输出 执行上面的代码执行上面的代码,在控制台中将输出如图在控制台中将输出如图 9.13 所示的结果所示的结果。 图图 9.13 9.13 【例例 9.99.9】的运行结果的运行结果 9.4.2 9.4.2 使用使用 TreeSetTreeSet 类类 TreeSet 类不仅实现了类不仅实现了 Set 接口接口,还实现了还实现了 java.util.SortedSet 接口接口,从而保证在遍历集合时从而保证在遍历集合时 按照递增的顺序获得对象按照递增的顺序获得对象。遍历对象时遍历对象时,可能是按照自然顺序递增排列可能是按照自然顺序递增排列,所以存入用所以存入用 TreeSet 类类 实现的实现的 Set 集合的对象必须实现集合的对象必须实现 Comparable 接口接口;也可能是按照指定比较器递增排列也可能是按照指定比较器递增排列,因此可因此可 以通过比较器对用以通过比较器对用 TreeSet 类实现的类实现的 Set 集合中的对象进行排序集合中的对象进行排序。 TreeSet 类通过实现类通过实现 java.util.SortedSet 接口增加的方法如表接口增加的方法如表 9.2 所示所示。 表表 9.2 SortedSet9.2 SortedSet 接口中新增方法接口中新增方法 方法名称方法名称 功能简介功能简介 comparator()comparator() 获得对该集合采用的比较器获得对该集合采用的比较器,返回值为返回值为 ComparatorComparator 类型类型,如果未如果未 采用任何比较器采用任何比较器,则返回则返回 nullnull first()first() 返回在集合中的排序位于第一的对象返回在集合中的排序位于第一的对象 last()last() 返回在集合中的排序位于最后的对象返回在集合中的排序位于最后的对象 headSet(E toElement)headSet(E toElement) 截取在集合中的排序位截取在集合中的排序位于对象于对象 toElement(toElement(不包含不包含)之前的所有对之前的所有对 象象,重新生成一个重新生成一个 SetSet 集合并返回集合并返回 subSet(E fromElement,E subSet(E fromElement,E toElement)toElement) 截取在集合中的排序位于对象截取在集合中的排序位于对象 fromElementfromElement(包含包含)和对象和对象 toElement(toElement(不包含不包含)之间的所有对象之间的所有对象,重新生成一个重新生成一个 SetSet 集合并返回集合并返回 tailSet(E fromElement)tailSet(E fromElement) 截取在集合中的排序位于对象截取在集合中的排序位于对象 fromElementfromElement(包含包含)之后的所有之后的所有 对象对象,重新生成一个重新生成一个 SetSet 集合并返回集合并返回 下面通过一个例子详细介绍表下面通过一个例子详细介绍表 9.2中比较难以理解的中比较难以理解的 headSet()、 subSet()和和 tailSet()三个方法三个方法, 以及在使用时需要注意的事项以及在使用时需要注意的事项。 Java 入门经典 第二篇 核心技术篇 第 9 章 集合类 本书免费提供学习之用,请支持正版图书。 制作人:科技强国 201 【例例 9.10】 首先新建一个首先新建一个 Person 类类,用用 TreeSet 类实现的类实现的 Set 集合要求该类必须实现集合要求该类必须实现 java.lang.Comparable 接口接口,这里实现的排序方式为按编号升序排列这里实现的排序方式为按编号升序排列。 实例位置实例位置:光盘光盘MR源码源码第第 9 章章9.0 在在 main()方法中首先初始化一个集合方法中首先初始化一个集合 (并对集合进行遍历并对集合进行遍历, 然后通过然后通过 headSet()方法截取集合方法截取集合 前面的部分对象得到一个新的集合前面的部分对象得到一个新的集合,并遍历新的集合并遍历新的集合(注意注意,在新集合中不包含指定的对象在新集合中不包含指定的对象) ,) , 接着通过接着通过 subSet()方法截取集合中间部分的对象得到一个新的集合方法截取集合中间部分的对象得到一个新的集合,并遍历新的集合并遍历新的集合(注意注意,在在 新集合中包含指定的起始对象新集合中包含指定的起始对象,但是不包含指定的终止对象但是不包含指定的终止对象) ,) ,最后通过最后通过 tailSet()方法截取集合后方法截取集合后 面的部分对象得到一个新的集合面的部分对象得到一个新的集合,并遍历新的集合并遍历新的集合(注意注意,在新集合中包含指定的对象在新集合中包含指定的对象) 。) 。 import java.util.Iterator; import java.util.TreeSet; public class P204Person implements Comparable private String name; private long id_card; public P204Person(String name,long id_card) =name; this.id_card=id_card; public int compareTo(Object o)/默认按编号升序排序默认按编号升序排序 P204Person person =(P204Person) o; int result =id_cardperson.id_card?1:(id_card=person.id_card?0:-1); return result; public static void main(String args) P204Person person1=new P204Person(“马先生马先生“,200181); P204Person person2=new P204Person(“李先生李先生“,200186); P204Person person3=new P204Person(“王小姐王小姐“,200193); P204Person person4=new P204Person(“尹先生尹先

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论