23 java语言基础-集合框架set-03.pptxVIP

  • 0
  • 0
  • 约6.49千字
  • 约 23页
  • 2021-04-08 发布于北京
  • 举报
大纲HashSetHashSet存储字符串并遍历HashSet存储自定义对象保证元素唯一性HashSet存储自定义对象保证元素唯一性图解HashSet存储自定义对象保证元素唯一性优化HashSet如何保证元素唯一性的原理面试题:为什么自动生成hashcode的时有个31的数案例1:将集合中的重复元素去掉(set实现)案例2:产生10个1-20之间的随机数要求随机数不能重复案例3:使用Scanner从键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符LinkedHashSetLinkedHashSet的概述和使用大纲TreeSetTreeSet存储Integer类型的元素并遍历TreeSet存储自定义对象 TreeSet保证元素唯一和自然排序的原理和图解案例:TreeSet存储自定义对象并遍历TreeSet的比较器构造方法TreeSet排序原理总结练习HashSet存储字符串并遍历 Set集合概述及特点 通过API查看SetSet 是一个不包含重复元素的 collection。Set只是一个接口,一般使用它的子类HashSet, LinkedHashSet, TreeSet HaseSet此类实现 Set 接口,由哈希表支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素掌握HashSet存储字符串并遍历使用增强for循环迭代器HashSet存储自定义对象保证元素唯一性public static void main(String[] args) { /** * HashSet存储自定义对象 * 需求:保证元素唯一性 * 思路:需要重写hashCode()和equals()方法 */ HashSetPerson set = new HashSet(); set.add(new Person(张三, 28)); set.add(new Person(张三, 28)); set.add(new Person(李四, 28)); set.add(new Person(李四, 28)); set.add(new Person(李四, 28)); System.out.println(set);}HashSet存储自定义对象保证元素唯一性图解HashSetPerson set = new HashSet();set.add(new Person(张三, 12));set.add(new Person(张三, 12));set.add(new Person(李四, 13));set.add(new Person(李四, 13));set.add(new Person(李四, 13));讲解:hashcode相当于买了车票的座位号hashset在存储数据时,数据hashcode不一样会直接存储如果一样,会进行比较,调用equals方法,如果返回true就不在存储,false存储 1: new Person(张三, 28)set 1: new Person(张三, 28)1: new Person(李四, 28)1: new Person(李四, 28)1: new Person(李四, 28)1: new Person(王五, 28)HashSet存储自定义对象保证元素唯一性的代码优化为了减少比较,优化hashCode()代码写法。 最终版就让Eclipse自动生成hashCode、equals方法即可。set40 + 28 = 68: new Person(张三, 28)40 + 28 = 68: new Person(张三, 28)39 + 38 = 77: new Person(李四, 38)39 + 38 = 77: new Person(李四, 38)39 + 28 = 67: new Person(李四, 28)HashSet如何保证元素唯一性的原理HashSet原理我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象如果没有哈希值相同的对象就直接存入集合如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存将自定义类的对象存入HashSet去重复的关键类中必须重写hashCode()和equals()方法hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)equals(): 属性相同返回true, 属性不同返回false,

文档评论(0)

1亿VIP精品文档

相关文档