【Java-集合】Set接口

(1 特点:存储多个任意类型的对象,无序、无下标、元素 的内容不允许重复。

(2) 方法:继承于父接口 Collection 中的方法。

(3) 实现类:HashSet

a. 自定义类型的对象存储在HashSet中,如何保证 HashSet元素内容不重复?

i. 覆盖 hashCode方法

原则:必须保证相同内容的对象返回相同的哈希码值,为了提高效率,尽可能的做到,不同内容的

对象返回不同的哈希码值

覆盖准则:通常将所有的属性拼凑为一个 int 类型的结果进行返回。

案例: public int hashCode(){

return this.name.hashCode()+this.age.hashCode(); // age 包装类型

}

ii. 覆盖 equals方法

必须保证相同内容的对象返回true -> 拒绝添加到HashSet集合中。

b. HashSet保证元素不重复执行的原理:对象往HashSet集合中存储时,当前对象调用自身hashCode方

法,获取哈希码值,从而获取对应存储下标,如果存储下标上没有存储任何元素,则当前对象直接存

储,但是如果存储下标上已经有存储了其他对象,则调用equals方法,进行比较对象的内容是否相

同,equals方法的结果为true,代表相同内容的对象,则HashSet集合拒绝添加,equals方法结果为

false,则代表内容不同的对象,则成功添加到HashSet集合中。

(4) 遍历方式:forEach(底层原理迭代器遍历)

(5) SortedSet:是 Set的子接口,无序、无下标、对元素内容进行排序。

a. 常用的实现类TreeSet

注意:如果自定类型的对象存储在TreeSet中,需要实现 java.lang.Comparable 接口,同时实现:

compareTo方法,方法中指定排序的规则。compareTo返回值结果如果为0,则TreeSet视为

相同内容的对象。(TreeSet去除重复内容的对象,利用compareTo返回值,结果为0,相同对

象)

(6) LinkedHashSet:按照添加顺序进行集合元素存储,同时元素内容不允许重复。

注意:LinkedHashSet是 HashSet的子类,所以如果自定类型的对象存储在LinkedHashSet中,

为了保证元素内容不重复,则需要对象对应的类覆盖 hashCode方法 和 equals方法(要求

和 父类HashSet一致)。

相关推荐
2301_780789662 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
学长毕设3 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn3 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川3 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵3 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David4 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1004 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin5 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
霸道流氓气质5 小时前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
captain3766 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis