HashSet集合的使用

之前用到set和map集合很少,这里恰好写题的时候遇见了就总结一下用法(Map下次遇见再):

题目:
给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]

说明:

输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。

	//上面说过输出的每个元素都是唯一的,那么就是说即使交集重复的也只会输出一个
	//换句话说就可以去重判断是否存在即可
	//去重的话可以用到set集合,它内部的 元素都是无序并且不重复,添加的元素如果是重复的则会返回false
	//因为不允许有重复 元素,所以内部也提供了判断集合里是否存在该元素的方法contains()
    public static int[] intersection(int[] nums1, int[] nums2) {
    	HashSet<Integer> s1=new HashSet<Integer>();
    	HashSet<Integer> s2=new HashSet<Integer>();
    	for(int num:nums1) {
    		s1.add(num);
    	}
    	for(int num:nums2) {
    		s2.add(num);
    	}
    	HashSet<Integer> temp=new HashSet<Integer>();
    	if(s1.size()<s2.size()) {
    		for(int num:s1) {
    			if(s2.contains(num)) {
    				temp.add(num);
    			}
    		}
    	}else {
    		for(int num:s2) {
    			if(s1.contains(num)) {
    				temp.add(num);
    			}
    		}
    	}
    	int []arr=new int[temp.size()];
    	int i=0;
    	//这里注意set集合里的遍历是没有顺序的,不能保证顺序,并且set集合不支持索引访问
    	//如果需要索引的话,需要返回set集合的迭代器
    	//遍历里面的元素简单直接的就是通过增强for循环直接获取
    	for(int num:temp) {
    		arr[i++]=num;
    	}
    	return arr;
    }

总结用法:上面题解注释里也写了一些,Set集合里面的元素是没有重复项的,在之后遇见删除重复项的时候可以使用它,牺牲空间换取时间, 因此它的查找是很高效的,它不能保证储存的元素有序,也不支持索引访问,因此遍历这个集合的时候可以采用增强for循环的方式,或者返回该集合的迭代器(下面会有方法)

HashSet的常用方法(大多数返回值都是布尔值,因为不允许有重复值,所以操作之前会判断,有重复值即返回false):

add(E):如果有重复元素则返回false
clear():清空
containg(Object):判断是否包含指定元素
iterator():返回此集合的迭代器
size()
remove():有就删除

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值