首页 > 其他分享 >HashSet、LInkedHashSet的使用和特点

HashSet、LInkedHashSet的使用和特点

时间:2023-06-15 23:01:02浏览次数:51  
标签:set LInkedHashSet HashSet 元素 System 特点 println out

HashSet的使用

Java 中的 HashSet 是 Collections Framework 中的一个类。 它允许您使用哈希表在集合中存储多个值。 哈希表借助哈希机制以无序的方式存储值。 导入 java.util.HashSet 包后,以下是在 Java 中创建 HashSet 的语法:

HashSet<data_type> name = new HashSet (capacity, loadFactor)

在上面的语法中:

Data_type:它是要存储在 HashSet 中的值的数据类型。

capacity:它是 HashSet 将存储的元素数。

loadFactor:它接受 0.00 到 1.00 之间的值。 假设 loadFactor 设置为 0.70,则 HashSet 的元素将被移动到另一个哈希表,一旦它被填充 70%,该哈希表的大小将是原来的两倍。

capacity 和 loadFactor 参数都是可选的。 如果您不提供参数,它将使用默认值初始化 HashSet。 现在我们已经了解了声明语法,让我们看看 HashSet 的一些基本特性。

HashSet 类层次结构

它扩展了 AbstractSet 类并实现了 Set 接口。 然后 set 接口进一步扩展了 Java HashSet 层次结构中的集合和可迭代接口。

HashSet 的一些最重要的特性包括:

  • 允许空值
  • 它使用散列机制存储元素
  • 这是一个非同步类
  • 使用哈希码插入和识别元素
  • 只包含独特的元素
  • 在搜索操作中最有用
  • 默认容量和负载因子值分别为 16 和 0.75
  • 它使用哈希表数据结构

HashSet 类的构造函数和方法

HashSet的不同构造函数

下面是用于构造和初始化 HashSet 的不同构造函数。

HashSet、LInkedHashSet的使用和特点_LinkedHashSet

HashSet的不同方法

下面是用于在 HashSet 上执行各种选项的不同方法。

HashSet、LInkedHashSet的使用和特点_LinkedHashSet_02

HashSetde 具体的一些方法

下面是具体代码实现:

public static void main(String[] args) {
		
		HashSet<String> set = new HashSet<>();//< >里面的就是泛型
		//泛型是什么,操作集合里面的就是什么类型
		
		//添加元素
		set.add("小红");
		set.add("小白");
		set.add("小文");
		set.add("小枭");
				
		//获取元素个数
		int size = set.size();
		System.out.println("获取元素个数" + size);
		
		//将newset1中所有的元素添加到set集合的中
		HashSet<String> newSet1 = new HashSet<>();
		Collections.addAll(newSet1, "aaa","bbb","cccc","ccc");//利用集合工具类(Collections)批量添加数据
		set.addAll(newSet1);
		
		//将newset2中所有的元素添加到set集合的指定位置
		HashSet<String> newSet2 = new HashSet<>();
		Collections.addAll(newSet2, "xxx","yyy","zzz","zzz","小光","小明","小强","小华");//利用集合工具类(Collections)批量添加数据
		set.addAll(newSet2);
		
		//清空集合
		//set.clear();

		System.out.println("判断集合是否包含某个元素:" + set.contains("王博文"));//true
		System.out.println("判断集合中是否包含某个子集合:" + set.containsAll(newSet1));//true
		
		//true表示没有元素,false表示有元素
		System.out.println("判断集合中是否没有元素:" + set.isEmpty());//false
		
//		set.remove("小白");//根据元素删除元素
//		set.removeAll(newSet1);//去除交集
//		
//		set.retainAll(newSet1);//保留交集

		//将集合转换为数组
		Object[] array1 = set.toArray();
		System.out.println(Arrays.toString(array1));
				
		//将集合转换为指定类型的数组
		String[] array2 = new String[set.size()];
		set.toArray(array2);
		System.out.println(Arrays.toString(array2));
		
		System.out.println("--------------------------");

两种遍历方法

1.遍历集合 -- foreach
for (String element : set) {
			System.out.println(element);
		}
		
		System.out.println("--------------------------");
2.遍历集合 -- Iterator
Iterator<String> iterator = set.iterator();
		while(iterator.hasNext()){//判断是否有可迭代的元素
			String next = iterator.next();//获取下一个元素
			System.out.println(next);
		}
注意

遍历出来的集合是无序的

理解无序:存入和取出的顺序不一致,无序不代表随机

HashSet的特点

1.无序的

2.不允许重复元素

3.允许使用null元素

4.线程不安全的

理解进入和出来的逻辑
存入顺序的逻辑:
1.获取元素的hash值 -- hashCode()
  			2.利用hash值计算出在数组中的下标
 			3.判断下标上是否有元素
  				3.1 没有元素 --就直接添加
 				3.2 有元素 -- 判断元素之间是否相同 -- 三个条件((hash) && (== || equals))
  					3.2.1 相同 -- 直接就不存,可以达到去重的效果
  					3.2.2 不同 -- 添加元素,JDK1.7 采用头插法,JDK1.8 采用尾插法
取出顺序的逻辑:

就是遍历数组,按存的顺序取出

HashSet、LInkedHashSet的使用和特点_Java_03

LinkedHashSet的使用

LinkedHashSet的使用和HashSet相似

存入顺序的逻辑、取出顺序的逻辑--------双向链表

HashSet、LInkedHashSet的使用和特点_HashSet_04

LinkedHashSet与HashSet异同:

相同:相同的存入顺序的逻辑、都有去重的作用

不同:

LinkedHashSet:有序

HashSet:无序

取出顺序的逻辑:LinkedHashSet从双向链表的头部开始遍历

HashSet直接遍历

LinkedHashSet是HashSet的子类,它的数据结构也是哈希表,只不过它的链表为双向链表,可以记录存储的顺序

标签:set,LInkedHashSet,HashSet,元素,System,特点,println,out
From: https://blog.51cto.com/u_16154651/6495640

相关文章

  • 深入探讨go语言开发的技术特点及其应用
    一、引言Go语言,又称Golang,是Google于2007年发布的一种静态类型、编译型语言。它融合了众多语言的优点,具有高效、安全、简洁等特点,迅速在开发领域崭露头角。本文将深入探讨go语言开发的技术特点及其应用,以期为相关领域的研究和实践提供参考。二、Go语言的技术特点简洁高效:Go语言的语......
  • 各种音视频协议技术及特点
    IP协议网络层协议,主要负责将数据包发送给最终的目标计算机,无状态、不可靠无连接协议无状态:无状态是指IP通信双方是不同步传输数据的状态信息。所有IP数据报的发送、传输和接收都是相互独立。无连接:无连接是指IP通信双方都不长久的维持对方的任何信息。上层协议每次发送数据的......
  • 计算属性-了解计算属性的语法和特点
    特点:定义的时候,要被定义为”方法“在使用计算属性的时候,当普通的属性使用即可好处:实现了代码的复用只要计算属性中依赖的数据源,则计算属性会自动重新求值<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"> <metaname="viewport"content="width=d......
  • Go语言中的init函数: 特点、用途和注意事项
    1.引言在Go语言中,init()函数是一种特殊的函数,用于在程序启动时自动执行一次。它的存在为我们提供了一种机制,可以在程序启动时进行一些必要的初始化操作,为程序的正常运行做好准备。在这篇文章中,我们将详细探讨init()函数的特点、用途和注意事项,希望能帮助你更好地理解和使用这个......
  • Go语言中的init函数: 特点、用途和注意事项
    1.引言在Go语言中,init()函数是一种特殊的函数,用于在程序启动时自动执行一次。它的存在为我们提供了一种机制,可以在程序启动时进行一些必要的初始化操作,为程序的正常运行做好准备。在这篇文章中,我们将详细探讨init()函数的特点、用途和注意事项,希望能帮助你更好地理解和使用这个......
  • 2023年6月10日,LinkedList,Vector,Stark,HashSet
    1.List1.LinkedListLinkedList的使用packagecom.wz.linkedlist_class;importjava.util.LinkedList;publicclasstest01{publicstaticvoidmain(String[]args){LinkedList<String>list=newLinkedList<>();list.add("AA......
  • Java开发技巧-数据结构-使用HashSet判断主键是否存在、使用Pair成对结果返回/Triple三
    场景Java中使用HashSet判断主键是否存在HashSet实现Set接口,由哈希表(实际上是HashMap)实现,但不保证set的迭代顺序,并允许使用null元素。HashSet的时间复杂度跟HashMap一致,如果没有哈希冲突则时间复杂度为O(1),如果存在哈希冲突则时间复杂度不超过O(n)。所以,在日常编码中,可以使用HashSe......
  • Python中enumerate对象的用法与特点
    Python的内置函数enumerate()函数用来枚举可迭代对象中的元素,返回可迭代的enumerate对象,其中每个元素都是包含索引和值的元组。#枚举字符串中的元素>>>list(enumerate('abcd'))[(0,'a'),(1,'b'),(2,'c'),(3,'d')]#枚举列表中的元素>>>list(enumerate([�......
  • 几个有特点的大学
    河南  河南大学开封     郑州大学 湖南  湖南大学 中南大学      湖南师范大学 湘潭大学湖北  华中农业大学 华中师范大学 华中科技大学    武汉大学  武汉理工大学    中南财经政法大学中国地质大学(武汉) ......
  • 深入源码探讨HashSet
    我们在工作中时常会用到HashSet,面试也有时候容易被问到,下面咱们就来聊聊HashSet。使用案例publicclassTest{publicstaticvoidmain(String[]args){HashSet<String>hashSet=newHashSet<>();hashSet.add("Java");hashSet.add("R");......