黑马程序员——java基础之Set集合
来源:互联网 发布:网络工程学院 编辑:程序博客网 时间:2024/05/21 15:01
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、Set集合概述
Set集合元素的存入顺序和取出顺序是不一致的,集合中的元素不可以重复。Set集合的两个常用子类:HashSet和TreeSet。
二、HashSet
1.HashSet的常见方法
//HashSet的常见操作方法add()addAll()remove()removeAll()iterator()2.HashSet集合保证元素唯一性的依据:
元素通过调用自己的hashCode和equals方法,比较异同。当hashcode值不同时,直接存入集合不进行equals判断。当hashcode相同时,继续进行equals判断,如果equals返回true则存入失败。
注意:当自定义对象存入HashSet中时,为了避免相同对象的存入,需要对象类根据自身的属性特征复写Object类的hashcode和equals方法。
3.练习题:自定义一个pers类,并将person对象存入HashSet集合,再将人对象的属性获取出来。
/* * 需求:自定义一个pers类,并将pers对象存入HashSet集合,再将人对象的属性获取出来 * 思路: * 1.定义Pers类,需要复写hashCode和equals以及toString方法 * 2.定义集合,将pers对象存入 * 3.通过迭代器将元素打印出来 */package com.itheima;import java.util.HashSet;import java.util.Iterator;class Demo{public static void main(String[] args){HashSet hs =new HashSet();hs.add(new Pers("zhangsan01",10));hs.add(new Pers("zhangsan02",20));hs.add(new Pers("zhangsan03",30));hs.add(new Pers("zhangsan01",10));//存入重复人对象hs.add(new Pers("zhangsan04",40));System.out.println(hs);//打印结果没有重复元素,说明重复元素没有存进来//定义迭代器取出元素Iterator it =hs.iterator();while(it.hasNext()){Pers p =(Pers)it.next();System.out.println(p);}}}//定义一个Pers类,用于描述人对象class Pers{private String name;private int age;Pers(String name,int age){this.name=name;this.age=age;}public int hashCode(){ //复写hashCode方法,保证元素存入的唯一性return name.hashCode()+age*36;}public boolean equals(Object obj){ //复写equals方法,保证元素存入的唯一性if(!(obj instanceof Pers))throw new RuntimeException("类型不匹配");Pers p = (Pers)obj;return this.name.equals(p.name)&&this.age==p.age;}public String toString(){ //复写toString方法,使得打印人对象出来的不是地址值return name+":::::"+age;}}
三、TreeSet
1.TreeSet常见操作方法
//TreeSet常见操作方法add();addAll();clear();remove();removeAll();iterator();2.TreeSet保证元素唯一性的依据:
TreeSet集合中的元素通过调用自己的compareTo方法判断元素是否重复,return 0表示元素重复,return正数或负数表示元素不重复。
注意:TreeSet存入自定义对象时,对象必须具备比较性,即自定义的对象类必须实现comparable接口并复写compareto方法。
当对象自己的比较性不符合需求时,我们可以自己传给TreeSet集合一个比较器X,X只需实现comparator接口即可。
当元素自身具备比较性且集合接收了比较器时,以集合的比较器为准。
3.练习题:将字符串存入TreeSet集合中,按照字符串长度由短到长的顺序取出。
/* *需求:将字符串存入TreeSet集合中,按照字符串长度由短到长的顺序取出。 *思路: *1.字符串本身的compareTo方法比较的是自然顺序而非字符串长短 *2.需要自己定义一个比较器并传给TreeSet集合 */package com.itheima;import java.util.Comparator;import java.util.Iterator;import java.util.TreeSet;class Demo{public static void main(String[] args){//定义一个TreeSet集合,并将判断字符串长短的比较器传给集合TreeSet ts =new TreeSet(new lenComp());ts.add("abcdfdf");ts.add("abcdkkkdkgg");ts.add("abcde");ts.add("abcdeffdf");//定义迭代器,取出元素Iterator it = ts.iterator();while(it.hasNext()){String s =(String)it.next();System.out.println(s); //验证打印结果是否为由短到长}}}//定义一个判断字符串长短的比较器class lenComp implements Comparator{public int compare(Object o1,Object o2){String s1 =(String)o1;//多态,必须强转,否则无法调用length()String s2 =(String)o2;//多态,必须强转,否则无法调用length()return new Integer(s1.length()).compareTo(new Integer(s2.length()));}}
0 0
- 黑马程序员:Java基础——Set集合之HashSet
- 黑马程序员:Java基础——Set集合之TreeSet
- 黑马程序员——JAVA基础之set集合
- 黑马程序员——java基础之Set集合
- 黑马程序员 java基础之set集合
- 黑马程序员---java基础之集合Set
- 黑马程序员-java基础之集合List,Set集合
- 黑马程序员——Java基础—集合(Set、List)
- 黑马程序员 Java基础——Set集合
- 黑马程序员—java基础_集合List和Set
- 黑马程序员—java基础之集合
- 黑马程序员—JAVA基础之集合
- 黑马程序员————java基础--------集合之set接口的特点及应用
- 黑马程序员——java基础拾遗之集合框架(一) List 和 Set
- 黑马程序员——Java学习日志之Set集合
- 黑马程序员-java基础常用集合类之Set
- 黑马程序员 java基础 集合框架之Set
- 黑马程序员---Java基础---Set集合
- NYOJ-833解题报告
- 关于((ch = getchar()) != EOF),ch声明为整型的问题
- 抽象类与接口
- 多线程之GCD
- 站上历史浪潮的计算机(一)
- 黑马程序员——java基础之Set集合
- IplImage结构及与其相关的读写函数
- 扫雷代码
- 条款31提及pimpl设计模式
- SpriteBuilder修改CCB文件中的子CCB文件需要注意的一个地方
- UI 过后的杂谈
- 南阳oj_(39)水仙花数
- viewWithTag 返回 nil , viewWithTag的值为nil的原因
- Linux下安装jdk1.7经验(Ubunto14.04)