Java集合中的HashSet

it2026-03-01  3

Java集合中的HashSet

导读

通过阅读本文,可以了解如下信息:

如何定义HashSet如何在HashSet中添加元素如何判断一个值是否在HashSet中如何删除HashSet中的值如何迭代HashSet

HashSet的特点

首先来看下HashSet类的定义

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { ... }

HashSet继承了AbstractSet类,并且实现了Set接口,获得集合的一般操作。

实现了Cloneable接口,表明可以可以实现克隆功能

实现了Serializable接口,表明可以被序列化

HashSet通过Hash算法来存储其中的元素,具有如下的特点:

不能保证元素的排列顺序,顺序有可能发生变化HashSet不是同步的,如果多个线程同时访问一个HashSet,如果有2条或者2条以上的线程同时修改了HashSet集合时,最终结果是不确定的,必须通过代码来保证其同步。HashSet中允许有null值

HashSet集合中存储的是对象,所以在创建的时候要用对应类型的引用,基本类型的对应引用如下:

基本类型对应的引用类型booleanBooleanbyteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacter

创建HashSet集合的格式

HashSet<T> name=new HashSet<T>();

在创建HashSet的时候需要引入java.util.HashSet

实例

import java.util.HashSet; public class Demo{ public static void main(String[] args){ //布尔类型的实例 HashSet<Boolean> booleanType=new HashSet<Boolean>(); booleanType.add(false); booleanType.add(true); System.out.println(booleanType); //byte类型的实例 HashSet<Byte> byteType=new HashSet<Byte>(); byte b1=2; byte b2=3; byteType.add(b1); byteType.add(b2); System.out.println(byteType); //short类型的实例 HashSet<Short> shortType=new HashSet<Short>(); short s1=4; short s2=5; shortType.add(s1); shortType.add(s2); System.out.println(shortType); //int类型的实例 HashSet<Integer> intType=new HashSet<Integer>(); intType.add(6); intType.add(7); System.out.println(intType); //long类型的实例 HashSet<Long> longType=new HashSet<Long>(); long l1=8; long l2=9; longType.add(l1); longType.add(l2); System.out.println(longType); //float类型的实例 HashSet<Float> floatType=new HashSet<Float>(); float f1=1.0f; float f2=2.0f; floatType.add(f1); floatType.add(f2); System.out.println(floatType); //double类型的实例 HashSet<Double> doubleType=new HashSet<Double>(); double d1=3.0; double d2=4.0; doubleType.add(d1); doubleType.add(d2); System.out.println(doubleType); //字符类型的实例 HashSet<Character> charType=new HashSet<Character>(); char c1='D'; char c2='J'; charType.add(c1); charType.add(c2); System.out.println(charType); //字符串类型的实例 HashSet<String> stringType=new HashSet<String>(); stringType.add("baidu"); stringType.add(""); System.out.println(stringType); } }

运行结果

[false, true] [2, 3] [4, 5] [6, 7] [8, 9] [1.0, 2.0] [4.0, 3.0] [D, J] [, baidu]

HashSet集合中不允许有相同的值

实例

import java.util.HashSet; public class Demo{ public static void main(String[] args){ HashSet<Integer> intType=new HashSet<Integer>(); intType.add(1); intType.add(1); intType.add(2); System.out.println(intType); } }

运行结果

[1, 2]

如果添加相同的数会对其进行覆盖,这里的add()方法中用的是HashMap中的put()方法,如果有兴趣的可以查看源码。HasMap中的put()方法大致的逻辑是:先查看Hash值是否相等,如果相等则通过==和equals()判断key的值,如果相等则覆盖,不相同就添加新元素。

判断元素是否存在

实例

import java.util.HashSet; public class Demo{ public static void main(String[] args){ HashSet<Integer> intType=new HashSet<Integer>(); intType.add(1); intType.add(2); intType.add(3); System.out.println(intType.contains(1)); } }

运行结果

true

这里用的是contains方法来进行判断,返回的是布尔值。

如何删除元素

实例

import java.util.HashSet; public class Demo{ public static void main(String[] args){ HashSet<Integer> intType=new HashSet<Integer>(); intType.add(1); intType.add(2); intType.add(3); intType.remove(2); System.out.println(intType); } }

运行结果

[1, 3]

这里用的是remove方法,如果想删除所有元素可以使用clear()。

计算大小

实例

import java.util.HashSet; public class Demo{ public static void main(String[] args){ HashSet<Integer> intType=new HashSet<Integer>(); intType.add(1); intType.add(2); intType.add(3); System.out.println(intType.size()); } }

运行结果

3

如何迭代HashSet

实例

import java.util.HashSet; import java.util.Iterator; public class Demo{ public static void main(String[] args){ HashSet<Integer> intType=new HashSet<Integer>(); intType.add(1); intType.add(2); intType.add(3); //通过Iterator迭代 Iterator ite=intType.iterator(); while(ite.hasNext()){ System.out.print(ite.next()+" "); } System.out.println(); //通过for循环迭代 for(Integer a:intType){ System.out.print(a+" "); } System.out.println(); } }

运行结果

1 2 3 1 2 3

主要有两种方法一种是使用Iterator迭代器,还有就是for循环。

其中Iterator迭代器中的HasNext()表示是否有下一个值,返回的是布尔值,next()代表下一个值。下图是Iterator接口的内部结构。

最新回复(0)