论文网站建设目标,长岛网站建设费用,wordpress怎么装模版,营销crm二、Set Set集合是Collection集合的子接口,该集合中不能有重复元素!! Set集合提供的方法签名,与父接口Collection的方法完全一致!! 即没有关于下标操作的方法 Set接口,它有两个常用的子实现类HashSet,TreeSet 三、HashSet HashSet实现了Set接口,底层是hash表(实际上底层是HashM…二、Set Set集合是Collection集合的子接口,该集合中不能有重复元素!! Set集合提供的方法签名,与父接口Collection的方法完全一致!! 即没有关于下标操作的方法 Set接口,它有两个常用的子实现类HashSet,TreeSet 三、HashSet HashSet实现了Set接口,底层是hash表(实际上底层是HashMap) 该类不允许重复元素,不保证迭代顺序,即无序(插入顺序和遍历顺序不一致) 3.1 方法演示 构造方法 HashSet() 构造一个新的空 set其底层 HashMap 实例的默认初始容量是 16加载因子是 0.75。HashSet(Collection? extends E c) 构造一个包含指定 collection 中的元素的新 setHashSet(int initialCapacity) 构造一个新的空 set其底层 HashMap 实例具有指定的初始容量和默认的加载因子0.75。HashSet(int initialCapacity, float loadFactor) 构造一个新的空 set其底层 HashMap 实例具有指定的初始容量和指定的加载因子。 方法 HashSet类中的方法与父接口Set接口中的方法一致,即又跟Collection接口中方法一致 …自行演示 public static void main(String[] args) {// 创建HashSet集合HashSetInteger set new HashSet( );// 放入元素boolean r1 set.add(221);System.out.println(r1 );boolean r2 set.add(221);System.out.println(r2 );set.add(111);set.add(111);set.add(44);set.add(23);// 遍历(for Iterator)for(Integer i: set) {System.out.println(i );}// 总结: 顺序问题 重复问题// 无序即 插入顺序和迭代顺序不一致// 不允许重复!IteratorInteger iterator set.iterator( );while(iterator.hasNext()) {Integer integer iterator.next( );System.out.println(integer );}// 演示其他方法(移除,判断,大小等等)System.out.println(set.size() );System.out.println(set.isEmpty( ));set.clear();System.out.println(set.size() );System.out.println(set.isEmpty( ));HashSetInteger set2 new HashSet( );set2.add(111);// 移除全部指定元素System.out.println(set.removeAll(set2));System.out.println(set );}3.2 扩容机制[面试] HashSet底层是Hash表,其实是HashMap. 默认初始容量16,加载因子0.75 — 扩容的阈值 容量 * 因子 16 * 0.75 12 即超过12个元素时就要触发扩容,扩容成原来的2倍 (ps: 初始容量和加载因子是可以通过构造方法创建时修改的…) 练习1: 将字符串数组String [] arr {“a”,“a”,“b”,“b”,“c”,“c”}去重,变成String[] arr {“a”,“b”,c};
// 思路: 遍历数组,将元素放入set集合,再将set集合转数组(toArray)3.3 去重原理[面试] 调用add(E e)方法时,会在底层调用元素e的hashcode方法来获得对象的地址值如果地址值不一样,直接存储如果地址值一样时,会再调用元素的equals方法判断元素的内容是否一样如果equals为false,那么存储 但是如果equals判断值为true,那么去重 以后只需要使用工具生成hashcode和equals就可以再HashSet中去重! public class Student{// ..其他代码省略// 重写hashcode和equalseOverridepublic int hashCode() {return Objects.hash(age, name);}Overridepublic boolean equals(Object o) {if (this o) return true;if (o null || getClass( ) ! o.getClass( )) return false;Student student (Student) o;return age student.age Objects.equals(name, student.name);}
}public static void main(String[] args) {HashSetInteger set new HashSet( );set.add(1);set.add(2);set.add(3);set.add(1);System.out.println(set );// 创建几个学生,放入set集合// 设想属性一样的学生会去重HashSetStudent stuSet new HashSet( );stuSet.add(new Student(18,zs));stuSet.add(new Student(19,ls));stuSet.add(new Student(19,ls));stuSet.add(new Student(20,ww));System.out.println(stuSet );}四、LinkedHashSet LinkedHashSet 既有Set的去重的特性,又有Linked结构有序的特性,即 存储在LinkedHashSet 中的元素既不允许重复,又能保证迭代顺序 public static void main(String[] args) {LinkedHashSetInteger lhs new LinkedHashSet( );lhs.add(211);lhs.add(111);lhs.add(111);lhs.add(44);lhs.add(44);lhs.add(23);System.out.println(lhs );}五、TreeSet TreeSet是基于 TreeMap 的 NavigableSet 的实现. 可以使用元素的自然顺序对元素进行排序或者根据创建 TreeSet 时提供的 Comparator 进行排序具体取决于使用的构造方法 即TreeSet会对存储的元素排序,当然也会去重! 5.1 方法演示 构造方法 TreeSet()构造一个新的空 set该 set 根据其元素的自然顺序进行排序。TreeSet(Comparator? super E comparator) 构造一个新的空 TreeSet它根据指定比较器进行排序。 方法 有常规的集合的方法(add,remove,Iterator,size等等),还有一些基于树结构能排序的特性才有的特殊方法,例如范围取值的(ceiling(),floor(),lower(),higher(),首尾取值(),first(),last()…)等操作 public static void main(String[] args) {TreeSetInteger set new TreeSet( );set.add(44);set.add(221);set.add(221);set.add(23);set.add(111);set.add(111);set.add(0);set.add(1114);// 发现: 会排序(默认是升序),不能存储重复元素System.out.println(set );for(Integer i : set) {System.out.println(i );}// 获得第一个(排序后)System.out.println(first: set.first( ));// 获得最后一个(排序后)System.out.println(last: set.last() );System.out.println(set );// 获取并移除第一个(排序后)System.out.println(第1个 set.pollFirst());// 获取并移除最后一个(排序后)System.out.println(最hou1个 set.pollLast());System.out.println(set );// 范围取值System.out.println(set.lower(100));}5.2 去重排序原理 前提知识: TreeSet底层是TreeMap,TreeMap是红黑树,是一种平衡二叉树(AVL) 练习1新建User类agename,创建TreeSet集合,创建多个User对象,将user对象存入TreeSet集合,实现去重排序,1) 年龄和姓名一致则去重 2) 按照年龄从小到大排序 TreeSetUser set new TreeSet( );set.add(new User(18,厄加特));// 运行报错ClassCastException 无法转成Comparable接口Comparable接口,强行对实现它的每个类的对象进行整体排序,这种排序被称为类的自然排序. 实现这个接口,需要重写comparTo方法,该方法返回值决定了是升序,降序还是去重! 该comparTo(T t)方法运行时 , this指代当前正在调用该方法的对象,参数T就是之前已经存在的元素. 返回值 0 ,意味着此元素(正在存储的元素)和之前的元素相同,即不存储,则去重返回值正整数,意味着此元素 大于 之前的元素, 放在该节点的右边返回值负整数,意味着此元素 小于 之前的元素,放在该节点的左边 最后都存储完毕时,取值时采用中序遍历(从根节点开始按照左,中,右的顺序读取) public class User implements ComparableUser{
// 属性和方法.../*** this 是指代正在存储的元素* o 是之前存储的元素*/
Override
public int compareTo(User o) {System.out.println(此对象-- this);System.out.println(指定对象-- o);// 姓名和年龄相同返回0,即去重不存储if (this.name.equals(o.getName()) this.getAge() - o.getAge() 0) {return 0;}// 年龄相同返回1,即保留下来的不去重的意思// 年龄不同的话就正常相减,返回负数或正数return this.getAge() - o.getAge() 0 ? 1 : this.getAge() - o.getAge();
}
}5.3 练习
需求创建 5个学生信息(姓名,语文成绩,数学成绩,英语成绩),放入TreeSet集合,输出时按照总分从高到低输出到控制台
package com.qf.set;import java.util.TreeSet;/*** --- 天道酬勤 ---** author QiuShiju* desc*/
public class StudentScore implements ComparableStudentScore{private String name;private int chinese;private int math;private int english;// set get 省略// 设计方法,获得总分public int getTotal(){return chinesemathenglish;}Overridepublic String toString() {return StudentScore{ name name \ 总分 getTotal() \ , chinese chinese , math math , english english };}Overridepublic int compareTo(StudentScore o) {return o.getTotal() - this.getTotal() 0 ? 1 : o.getTotal() - this.getTotal();}
}class TestStudentScore {public static void main(String[] args) {TreeSetStudentScore set new TreeSet( );set.add(new StudentScore(zhang3,70,70,70 ));set.add(new StudentScore(wang5,100,100,100 ));set.add(new StudentScore(li4,80,80,80 ));set.add(new StudentScore(zhao6,60,60,60 ));set.add(new StudentScore(zhou7,90,90,90 ));for (StudentScore score : set) {System.out.println(score );}}
}六、总结
HashSet 方法与父Collection接口中方法一致正常记
需要向着面试准备 HashSet底层HashMap扩容去重原理LinkedHashSet 了解TreeSet底层的树结构能了解就行只需要指定要想去除排序必须要实现接口重写方法返回0去重返回正负如何如何
文章转载自: http://www.morning.tnzwm.cn.gov.cn.tnzwm.cn http://www.morning.nuejun.com.gov.cn.nuejun.com http://www.morning.nhdmh.cn.gov.cn.nhdmh.cn http://www.morning.ggtkk.cn.gov.cn.ggtkk.cn http://www.morning.c7510.cn.gov.cn.c7510.cn http://www.morning.qnhcx.cn.gov.cn.qnhcx.cn http://www.morning.xjkr.cn.gov.cn.xjkr.cn http://www.morning.xmnlc.cn.gov.cn.xmnlc.cn http://www.morning.jopebe.cn.gov.cn.jopebe.cn http://www.morning.jfcbs.cn.gov.cn.jfcbs.cn http://www.morning.yhjrc.cn.gov.cn.yhjrc.cn http://www.morning.rwnx.cn.gov.cn.rwnx.cn http://www.morning.dxqfh.cn.gov.cn.dxqfh.cn http://www.morning.nqcwz.cn.gov.cn.nqcwz.cn http://www.morning.wncb.cn.gov.cn.wncb.cn http://www.morning.qkqjz.cn.gov.cn.qkqjz.cn http://www.morning.lmdfj.cn.gov.cn.lmdfj.cn http://www.morning.tsnq.cn.gov.cn.tsnq.cn http://www.morning.xdjwh.cn.gov.cn.xdjwh.cn http://www.morning.cryb.cn.gov.cn.cryb.cn http://www.morning.wdprz.cn.gov.cn.wdprz.cn http://www.morning.qyfqx.cn.gov.cn.qyfqx.cn http://www.morning.nqrfd.cn.gov.cn.nqrfd.cn http://www.morning.qkwxp.cn.gov.cn.qkwxp.cn http://www.morning.hcszr.cn.gov.cn.hcszr.cn http://www.morning.hjjkz.cn.gov.cn.hjjkz.cn http://www.morning.fkgct.cn.gov.cn.fkgct.cn http://www.morning.clpdm.cn.gov.cn.clpdm.cn http://www.morning.epeij.cn.gov.cn.epeij.cn http://www.morning.qzfjl.cn.gov.cn.qzfjl.cn http://www.morning.yrlfy.cn.gov.cn.yrlfy.cn http://www.morning.snbq.cn.gov.cn.snbq.cn http://www.morning.ltpzr.cn.gov.cn.ltpzr.cn http://www.morning.ypklb.cn.gov.cn.ypklb.cn http://www.morning.rykn.cn.gov.cn.rykn.cn http://www.morning.baguiwei.com.gov.cn.baguiwei.com http://www.morning.chxsn.cn.gov.cn.chxsn.cn http://www.morning.jqllx.cn.gov.cn.jqllx.cn http://www.morning.jkpnm.cn.gov.cn.jkpnm.cn http://www.morning.rkxk.cn.gov.cn.rkxk.cn http://www.morning.kyjyt.cn.gov.cn.kyjyt.cn http://www.morning.zmzdx.cn.gov.cn.zmzdx.cn http://www.morning.yrccw.cn.gov.cn.yrccw.cn http://www.morning.clpkp.cn.gov.cn.clpkp.cn http://www.morning.ngdkn.cn.gov.cn.ngdkn.cn http://www.morning.msbct.cn.gov.cn.msbct.cn http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn http://www.morning.mfsxd.cn.gov.cn.mfsxd.cn http://www.morning.hphqy.cn.gov.cn.hphqy.cn http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn http://www.morning.rbtny.cn.gov.cn.rbtny.cn http://www.morning.rzdzb.cn.gov.cn.rzdzb.cn http://www.morning.bccls.cn.gov.cn.bccls.cn http://www.morning.yhdqq.cn.gov.cn.yhdqq.cn http://www.morning.wcqxj.cn.gov.cn.wcqxj.cn http://www.morning.lqffg.cn.gov.cn.lqffg.cn http://www.morning.lgrkr.cn.gov.cn.lgrkr.cn http://www.morning.snnkt.cn.gov.cn.snnkt.cn http://www.morning.c7493.cn.gov.cn.c7493.cn http://www.morning.hxrg.cn.gov.cn.hxrg.cn http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn http://www.morning.yrpd.cn.gov.cn.yrpd.cn http://www.morning.dnqpq.cn.gov.cn.dnqpq.cn http://www.morning.ktnt.cn.gov.cn.ktnt.cn http://www.morning.bhxzx.cn.gov.cn.bhxzx.cn http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn http://www.morning.bnpn.cn.gov.cn.bnpn.cn http://www.morning.fmry.cn.gov.cn.fmry.cn http://www.morning.fkmrj.cn.gov.cn.fkmrj.cn http://www.morning.rbbzn.cn.gov.cn.rbbzn.cn http://www.morning.pctql.cn.gov.cn.pctql.cn http://www.morning.qytby.cn.gov.cn.qytby.cn http://www.morning.brscd.cn.gov.cn.brscd.cn http://www.morning.fpczq.cn.gov.cn.fpczq.cn http://www.morning.jjtwh.cn.gov.cn.jjtwh.cn http://www.morning.nckjk.cn.gov.cn.nckjk.cn http://www.morning.gyrdn.cn.gov.cn.gyrdn.cn http://www.morning.plydc.cn.gov.cn.plydc.cn http://www.morning.hxrg.cn.gov.cn.hxrg.cn http://www.morning.hdqqr.cn.gov.cn.hdqqr.cn