第9章 集合(四)课件

上传人:我*** 文档编号:141077464 上传时间:2020-08-04 格式:PPT 页数:37 大小:200KB
返回 下载 相关 举报
第9章 集合(四)课件_第1页
第1页 / 共37页
第9章 集合(四)课件_第2页
第2页 / 共37页
第9章 集合(四)课件_第3页
第3页 / 共37页
第9章 集合(四)课件_第4页
第4页 / 共37页
第9章 集合(四)课件_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《第9章 集合(四)课件》由会员分享,可在线阅读,更多相关《第9章 集合(四)课件(37页珍藏版)》请在金锄头文库上搜索。

1、第9章 集合(四),JSP基础知识,Set接口也是Collection接口的子接口,但是与List接口不同的是,Set接口中不能加入重复的元素。,9-1 Set接口,9-2 HashSet,java.util.HashSet类实现了java.util.Set接口,是Set接口最常用的实现之一。HashSet在保存数据的时候按一定顺序放入其背后的数组中,但顺序不是用户可控制的,对用户来说就是“无序”。,使用foreach遍历HashSet:,9-2 HashSet,import java.util.*; public class HashSetDemo02 public static void

2、main(String args) Set set = new HashSet(); set.add(caterpillar); set.add(momor); set.add(bush); / 使用enhanced for loop显示对象 for (String name : set) System.out.print(name + ); System.out.println(); ,caterpillar momor bush,说明: 程序运行时向集合中加入元素的顺序并不是集合中的保存顺序,证明HashSet类中的元素是无序排列的。改变元素的值,会影响它的输出顺序。,9-2 HashSe

3、t,import java.util.HashSet; import java.util.Set; public class HashSetDemo01 public static void main(String args) Set allSet = new HashSet(); allSet.add(A); / 增加元素 allSet.add(B); / 增加元素 allSet.add(C); / 增加元素 allSet.add(C); / 重复元素,不能加入 allSet.add(C); / 重复元素,不能加入 allSet.add(D); / 增加元素 allSet.add(E); /

4、 增加元素 System.out.println(allSet); / 输出集合对象,调用toString() ,9-2 HashSet,D, E, A, B, C,import java.util.*; public class HashSetDemo02 public static void main(String args) Set set = new HashSet(); set.add(caterpillar); set.add(momor); set.add(bush); / 故意加入重复的对象 set.add(caterpillar); / 使用Iterator显示对象 Iter

5、ator iterator = set.iterator(); while (iterator.hasNext() System.out.print(iterator.next() + ); System.out.println(); ,9-2 HashSet,momor bush caterpillar,说明: 从程序的运行结果中可以清楚地看出,对于重复元素只会增加一次,如果添加的元素,集合中已经存在,则这个元素会冲掉已经存在集合中的元素。,9-2 HashSet,HashSet的其他方法: HashSet(Collection c) 构造一个包含指定 collection 中的元素的新 s

6、et。 retainAll(Collection c) 仅保留 set 中那些包含在指定 collection 中的元素。 addAll(Collection c) 如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中。,9-2 HashSet,import java.util.*; class TestSet public static void main(String args) Set s1 = new HashSet(); Set s2 = new HashSet(); s1.add(f1); s1.add(f2); s1.add(f3); s1.a

7、dd(f4); for (String element : s1) System.out.println(element); s2.add(f3); s2.add(f4); s2.add(f5); s2.add(f6);,9-2 HashSet,/ 打印此时的s1,s2 System.out.println(此时S1里装的是: + s1 + n + 此时s2时装的是: + s2); System.out.println(-); Set s3 = new HashSet(s1); Set s4 = new HashSet(s2); / 打印此时的s3,s4 System.out.println(

8、此时S3里装的是: + s3 + n + 此时s4时装的是: + s4); / 取得S3各s2的交集,仅保留与s2相同的元素 s3.retainAll(s2); System.out.println(s3与s2的交集是: + s3); / 把s1的所有对象又添加到s4中,因为不能存在重复,所以结果如下: s4.addAll(s1); System.out.print(把s1的所有对象又添加到s4中,因为不能存在重复,所以结果如下: + s4 + n); ,9-2 HashSet,9-3 TreeSet,如果想对输入的数据进行有序排列,则要使用TreeSet子类。 TreeSet子类会将元素自动

9、依字典顺序进行排列。,import java.util.Set; import java.util.TreeSet; public class TreeSetDemo01 public static void main(String args) Set allSet = new TreeSet(); allSet.add(C); / 加入元素 allSet.add(C); / 重复元素,不能加入 allSet.add(C); / 重复元素,不能加入 allSet.add(D); / 加入元素 allSet.add(B); / 加入元素 allSet.add(A); / 加入元素 allSet.

10、add(E); / 加入元素 System.out.println(allSet); / 输出集合,调用toString() ,9-3 TreeSet,A, B, C, D, E,import java.util.Set; import java.util.TreeSet; public class TreeSetDemo02 public static void main(String args) Set set = new TreeSet(); set.add(justin); set.add(caterpillar); set.add(momor); / 使用enhanced for l

11、oop显示对象 for (String name : set) System.out.print(name + ); System.out.println(); ,9-3 TreeSet,caterpillar justin momor,关于TreeSet的排序说明 既然TreeSet本身是可以排序的,那么现在定义一个自己的类,是否也可以进行排序的操作呢?,9-3 TreeSet,import java.util.Set; import java.util.TreeSet; class Person / 定义Person类 private String name; / 定义name属性 pri

12、vate int age; / 定义age属性 public Person(String name, int age) / 通过构造方法为属性赋值 this.name = name; / 为name属性赋值 this.age = age; / 为age属性赋值 public String toString() / 覆写toString()方法 return 姓名: + this.name + ;年龄: + this.age; public class TreeSetDemo02 public static void main(String args) Set allSet = new Tree

13、Set();/ 实例化Set集合,类型为 Person allSet.add(new Person(张三, 30); / 加入元素 allSet.add(new Person(李四, 31); / 加入元素 allSet.add(new Person(王五, 32); / 加入元素 allSet.add(new Person(王五, 32); / 重复元素,不能加入 allSet.add(new Person(王五, 32); / 重复元素,不能加入 allSet.add(new Person(赵六, 33); / 加入元素 allSet.add(new Person(孙七, 33); / 年

14、龄重复 System.out.println(allSet); / 输出集合内容 ,Exception in thread main java.lang.ClassCastException: Person cannot be cast to java.lang.Comparable at java.util.TreeMap.put(Unknown Source) at java.util.TreeSet.add(Unknown Source) at TreeSetDemo02.main(TreeSetDemo02.java:22),9-3 TreeSet,程序运行,会得如下结果:,说明: 以

15、上程序代码出现了类转换异常,会出现这样的问题,是因为TreeSet中的元素是有序存放,所以对于一个对象必须指定好其排序规则,且TreeSet中的每个对象所在的类都必须实现java.lang. Comparable接口才可以正常使用。,9-3 TreeSet,Comparable接口,直译过来也就是比较器,通常用于实现指定对象的排序规则。Comparable接口的定义如下: publicinterfaceComparable publicintcompareTo(To); compareTo()方法返回一个int类型的值,此返回值只有以下三个: 1:表示大于 -1:表示小于 0:表示等于 范例:指定排序规则 TreeSetDemo03.java,9-3 TreeSet,说明: 从程序的运行结果中可以发现,重复的“王五”对象只有一个了;“赵六”和“孙七”的数据中姓名并不重复,只是年龄重复了,但是“孙七”却没有加入到集合中。 这是由于采用了比较器造成的,因为比较器操作时如果某个属性没有进行比较的指定,则也会认为是同一个对象,所以此时应该在Person类的compareTo方法中增加按姓名比较。 范例:修改Person的比较器 TreeSetDemo04

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号