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

Java中Set接口与实现类的使用

Set接口与实现类的使用

文章目录

  • Set接口与实现类的使用
    • Set及其实现类的特点
    • 开发中的使用频率及场景
    • Set中无序性、不可重复性的理解
    • 添加到HashSet\LinkedHashSet中元素的要求

Java集合框架体系(java.util包下)

  • java.util.Collection:存储一个一个的数据
    • 子接口:List:存储有序的、可重复的数据(动态数组)
      • ArrayList(主要实现类)、LinkedList、Vector
    • 子接口:Set:存储无序的、不可重复的数据
      • HashSet(主要实现类)、LinkedHashSet、TreeSet
  • java.util.Map:存储一对一对的数据(类似于函数)
    • HashMap(主要实现类)、LinkedHashMap、TreeMap、Hashtable、Properties

Set及其实现类的特点

  • java.util.Collection
    • 子接口 Set
      • HashSet 主要实现类 底层使用的HashMap ,即数组+单向链表+红黑树结构进行存储(jdk8之前)
        • LinkedHashSet 是HashSet的子类,在现有的数组+单向链表+红黑树结构的基础上,头添加了一组双向链表,用于记录添加元素的先后顺序。(可以按照添加顺序进行遍历)
      • TreeSet:底层使用红黑树存储、可以按照添加的元素的指定的属性大小顺序进行遍历。
//使用HashSet,遍历元素的顺序和存入元素的顺序不一致
package Collection;public class Person{String name;int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}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;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}package Collection;
import org.junit.Test;import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;public class SetTest {public static void main(String[] args) {Set set = new HashSet();set.add("AA");set.add(123);set.add("BB");set.add(new Person("Tom",12));Iterator iterator = set.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}}
}
//使用LinkedHashSet进行遍历,与存入顺序一致
package Collection;import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;public class LinkedHashSetTest {public static void main(String[] args) {//使用LinkedHashSet进行遍历Set set = new LinkedHashSet();set.add(123);set.add("ABC");set.add("567");Iterator iterator = set.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}}
}
//输出结果
//123
//ABC
//567

开发中的使用频率及场景

  • 相较于List、Map来说,set的使用频率较少
  • 用来过滤重复数据

Set中无序性、不可重复性的理解

  • 无序性 : 不等于随机性。也不等同于添加元素的顺序和遍历元素的顺序不一致。而是和添加元素的位置有关,不像ArrayList那样依次紧密排列。

    ​ 根据添加元素的哈希值,计算其在数组中的存储位置,此位置不是依次排列的,表现为无序性

  • 不可重复性:添加到Set中的元素是不能相同的,比较的标准,需要判断hashCode得到的哈希值与equals()得到的boolean结果。哈希值相同且equals()返回true,则认为元素是相同的。

添加到HashSet\LinkedHashSet中元素的要求

  • 要求元素所在的类要重写两个方法,equals()hashCode()
  • 要求equals()hashCode()要保持一致性,只需要在IDEA中自动生成两个方法的重写即可,即能保证两个方法的一致性

http://www.mrgr.cn/news/58957.html

相关文章:

  • 【Sublime Text】设置中文 最新最详细
  • XML HTTP Request
  • 配置nginx服务通过ip访问多网站
  • WPF+MVVM案例实战(四)- 自定义GroupBox边框样式实现
  • Java项目实战II基于微信小程序的电子点餐系统(开发文档+数据库+源码)
  • 241024-Ragflow离线部署Docker-Rootless环境配置修改
  • Qt/C++ 调用迅雷开放下载引擎(ThunderOpenSDK)下载数据资源
  • 【从零开始的LeetCode-算法】3223. 操作后字符串的最短长度
  • Nature 正刊丨土壤质地对生态系统水分限制的全球影响
  • rabbitmq自学总结
  • docker 安装kuboard
  • STM32
  • 堆排序算法和Topk思想
  • java计算机毕设课设—连连看游戏(附源码、文章、相关截图、部署视频)
  • qsort函数排序结构体数据
  • 代码随想录刷题学习日记
  • 如何选择运维产品:以一体化管理为核心,提升运维效率与质量
  • ProTable样式缺失
  • Java基础知识异常
  • python学习笔记:___getattr__
  • 鸿蒙开发初级证书考试答案
  • Uni-App-01
  • 架构师备考专栏-导航页
  • C语言输入输出效率优化
  • layui表格反选功能
  • uniapp:上拉加载更多、下拉刷新、页面滚动到指定位置