Set接口

news/发布时间2024/5/21 4:59:19

1.Set接口特点

  • Set接口是无序的
  • Set接口中的数据不允许重复
  • Set接口无法通过下标访问数据
  • 查找慢,插入删除快(底层数据结构是哈希表和红黑树)
  • Set集合使用equals()和hashCode()方法实现元素去重

 

 

2.HashSet特点:

  • HashSet是Set接口的实现类
  • 线程不安全

 

HashSet避免对象重复的规则:

1)如果对象的hashCode值不同,则不用判断equals方法,就直接存到HashSet中。

2)如果对象的hashCode值相同,需要用equals方法进行比较,如果结果为true,则视为相同元素,不存储。如果结果为false,视为不同元素,进行存储。

 如果对象元素要存储到HashSet中,必须覆盖hashCode方法和equals方法。才能保证从对象中的内容的角度保证唯一。

3.迭代器Iterator

迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节。

 

HashSet类中没有提供根据集合索引获取索引对应的值的⽅法,

因此遍历HashSet时需要使⽤Iterator迭代器。Iterator的主要⽅法如下

返回类型

方法

描述

boolean

hasNext()

如果有元素可迭代

Object

next()

返回迭代的下⼀个元素

 

4 TreeSet

TreeSet 基于TreeMap 实现。TreeSet可以实现有序集合,但是有序性需要通过比较器实现。

 

TreesSet特点:

  • 有序
  • 不重复
  • 添加、删除、判断元素存在性效率比较高
  • 线程不安全

 

TreeSet对元素进行排序的方式:

1) 如果是基本数据类型和String类型,无需其它操作,可以直接进行排序。

2) 对象类型元素排序,需要实现Comparable接口,并覆盖其compareTo方法。

3) 自己定义实现了Comparator接口的排序类,并将其传给TreeSet,实现自定义的排序规则。

5 LinkedHashSet

LinkedHashSet是一种有序的Set集合,其元素的存入和取出顺序是相同的。

public class Test {  public static void main(String[] args) { // LinkedHashSet:链表结构的Set集合   // 1.不重复 2.能保证添加的次序(添加和输出次序一致)      Set set = new LinkedHashSet();       set.add("c");  set.add("a");   set.add("d");    set.add("b");     System.out.println(set);  }
}
 //迭代器遍历Iterator iterator = hashSet.iterator();//获取迭代器对象 有序:有下标while (iterator.hasNext()){//判断是否指定能够移动Object next = iterator.next();//指定移动并获取当前的元素System.out.println(next);}//遍历--- foreachfor(Object o: hashSet){System.out.println(o);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/47140418.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

IDEA卸载重装

安装教程 本教程主要介绍IDEA的下载、安装、插件配置的方式及其注意事项。 第一步:卸载老版本IDEA 请彻底干净地卸载原来存在的老版本IDEA并删除与之相关的配置文件;图示如下: 第二步:下载IDEA 请在官方网站 https://www.jetbrains.com/idea/download/other.html 下载I…

笨办法学Python3 习题10 那是什么

知识点: 转义序列\\ 转义 \ (反斜杠) \ 转义 (单引号) \" 转义 " (双引号) \t 水平制表符 \r 回车符 \n 换行符 \b 退格符,向前退一格 \f 进纸符 \a 响铃符 \v 垂直制表符

springMVC数据校验

应用程序在执行业务逻辑前,必须通过数据校验保证接收的输入数据时正确合法的。 1.JRS303 2.@Valid 校验注解(获取校验结果) DepositDto.java1 @Data2 @AllArgsConstructor3 @NoArgsConstructor4 public class DepositDto {5 @NotEmpty(message = "账号不能为空&q…

Linux中xargs命令学习

转自:https://zhuanlan.zhihu.com/p/340804463?utm_id=0,提到了许多参数,用到时可以参考 1.介绍cat /etc/passwd | grep root 等同于 echo "hello world" | echo 管道命令|,将左侧命令(cat /etc/passwd)的标准输出转换为标准输入,提供给右侧命令(grep …

VLAN链路类型

交换机的端口,可以分为两种:■ 访问链接(Access Link)■ 汇聚链接(Trunk Link)1.访问链接(Access Link)访问链接,指的是“只属于一个VLAN,且仅向该VLAN转发数据帧”的端口。在大多数情况下,访问链接(Access)所连的是客户机。通常设置VLAN的顺序是:生成VLAN;设定…