当前位置: 首页 > article >正文

第十二节:第五部分:集合框架:Set集合的特点、底层原理、哈希表、去重复原理

Set系列集合特点

Set系列集合特点

哈希值

哈希值

HashSet集合的底层原理

HashSet集合的底层原理1
HashSet集合的底层原理2
HashSet集合的底层原理3
HashSet集合的底层原理4

HashSet集合去重复

HashSet集合去重复

代码

代码一:整体了解一下Set系列集合的特点

package com.itheima.day20_Collection_set;import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;//目标:整体了解一下Set系列集合的特点。
public class SetTest1 {public static void main(String[] args) {// 1、创建一个Set集合的对象//Set<Integer> set = new HashSet<>();// 创建了一个HashSet的集合对象。一行经典代码 HashSet: 无序 不重复 无索引//Set<Integer> set = new LinkedHashSet<>();//有序  不重复  无索引Set<Integer> set = new TreeSet<>();//可排序(升序)    不重复 无索引set.add(666);set.add(666);set.add(666);set.add(888);set.add(888);set.add(888);set.add(777);set.add(777);System.out.println(set);}
}

结果1

代码二:了解一下哈希值。Java中的所有对象,都可以调用0bejct类提供的hashcode方法,返回该对象自己的哈希值

Student类(学生类)

package com.itheima.day20_Collection_set;import java.util.Objects;public class Student {private String name;private int age;private double height;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", height=" + height +'}';}public Student() {}public Student(String name, int age, double height) {this.name = name;this.age = age;this.height = height;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}
}

SetTest2 类(主程序)

package com.itheima.day20_Collection_set;
/*目标:了解一下哈希值。Java中的所有对象,都可以调用0bejct类提供的hashcode方法,返回该对象自己的哈希值
public int hashCode():返回对象的哈希值。
同一个对象多次调用hashcode()方法返回的哈希值是相同的。
不同的对象,它们的哈希值一般不相同,但也有可能会相同(哈希碰撞)。*/
public class SetTest2 {public static void main(String[] args) {Student s1 = new Student("飞鸟马时",17,165);Student s2 = new Student("枣伊吕波",17,155);System.out.println(s1.hashCode());System.out.println(s2.hashCode());String str1 = new String("abc");String str2 = new String("acD");System.out.println(str1.hashCode());System.out.println(str2.hashCode());}
}

结果2

代码三:自定义的类型的对象,比如两个内容一样的学生对象,如何让HashSet集合能够去重复

Student类(学生类)

package com.itheima.day20_Collection_set;import java.util.Objects;public class Student {private String name;private int age;private double height;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", height=" + height +'}';}//只要两个对象内容一样就返回true@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 && Double.compare(height, student.height) == 0 && Objects.equals(name, student.name);}@Overridepublic int hashCode() {// 姓名 年龄 身高计算哈希值的return Objects.hash(name, age, height);}public Student() {}public Student(String name, int age, double height) {this.name = name;this.age = age;this.height = height;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}
}

SetTest3 (主程序)

package com.itheima.day20_Collection_set;import java.util.HashSet;
import java.util.Set;//目标:自定义的类型的对象,比如两个内容一样的学生对象,如何让HashSet集合能够去重复!
public class SetTest3 {public static void main(String[] args) {Student s1 = new Student("飞鸟马时",17,165);Student s2 = new Student("枣伊吕波",17,155);Student s3 = new Student("枣伊吕波",17,155);Set<Student> students = new HashSet<>();students.add(s1);students.add(s2);students.add(s3);System.out.println(students.toString());}
}

去重复后

http://www.lryc.cn/news/2396661.html

相关文章:

  • 【C++项目】:仿 muduo 库 One-Thread-One-Loop 式并发服务器
  • 基于大数据的个性化购房推荐系统设计与实现(源码+定制+开发)面向房产电商的智能购房推荐与数据可视化系统 基于Spark与Hive的房源数据挖掘与推荐系统设计
  • FFmpeg学习笔记
  • Chrome 通过FTP,HTTP 调用 Everything 浏览和搜索本地文件系统
  • GpuGeek如何成为AI基础设施市场的中坚力量
  • 【Hot 100】45. 跳跃游戏 II
  • Codeforces Round 1026 (Div. 2) C. Racing
  • Python库CloudScraper详细使用(绕过 Cloudflare 的反机器人页面的 Python 模块)
  • oracle sql 语句 优化方法
  • Python数学可视化——显函数、隐函数及复杂曲线的交互式绘图技术
  • 代码随想录打卡|Day51 图论(dijkstra(堆优化版)精讲、Bellman_ford 算法精讲)
  • 【深度剖析】流处理系统性能优化:解决维表JOIN、数据倾斜与数据膨胀问题
  • PostgreSQL优化实践:从查询到架构的性能提升指南
  • AI入门——AI大模型、深度学习、机器学习总结
  • 【AI论文】论文转海报:迈向从科学论文到多模态海报的自动化生成
  • 智慧零工平台前端开发实战:从uni-app到跨平台应用
  • 【Linux】基础文件IO
  • opencv调用模型
  • 由浅入深一文详解同余原理
  • ESP-IDF 离线安装——同时存在多个版本以及进行版本切换的方法
  • android 上位机调试软件-安卓串口 com ttl 调试——仙盟创梦IDE
  • python打卡day42
  • XMOS以全新智能音频及边缘AI技术亮相广州国际专业灯光音响展
  • Playwright 测试框架 - Node.js
  • 机器学习有监督学习sklearn实战二:六种算法对鸢尾花(Iris)数据集进行分类和特征可视化
  • vr中风--数据处理模型搭建与训练2
  • 鸿蒙next系统以后会取代安卓吗?
  • PolyGen:一个用于 3D 网格的自回归生成模型 论文阅读
  • 约瑟夫问题 洛谷 - P1996
  • 系统思考:成长与投资不足