Java集合中的HashSet

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集合中存储的是对象,所以在创建的时候要用对应类型的引用,基本类型的对应引用如下:

基本类型对应的引用类型
booleanBoolean
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter

创建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("CSDN");
		System.out.println(stringType);		
	}
}

运行结果

[false, true]
[2, 3]
[4, 5]
[6, 7]
[8, 9]
[1.0, 2.0]
[4.0, 3.0]
[D, J]
[CSDN, 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接口的内部结构。

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值