Lc35--- 349.两个数组的交集(java版)---(排序)

1.题目描述
给定两个数组 nums1 和 nums2 ,返回 它们的
交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

2.知识点
(1)用hashSet实现
(2)set.add(数组名),往集合里面添加元素,自动过滤掉重复的元素
(3)创建一个新的数组,放置交集元素。
(4)(set2.contains(num):表示判断 set2 集合中是否包含元素 num。如果包含,返回 true;如果不包含,返回 false。
(5)result[index++] = num; 的意思是将 num 的值赋给数组 result 的第 index 个位置,然后将 index 的值增加 1。这样做的效果相当于先赋值,然后将 index 自增。
//result[index] = num;:将 num 的值赋给数组 result 的第 index 个位置。
index = index + 1;:将 index 的值增加 1,以便下次循环时可以将下一个元素存放在数组中的下一个位置。

User
int index = 0;
        for (int num : intersection) {
            result[index++] = num;
        }

可以等效成

for (int i = 0; i < result.length; i++) {
    result[i] = intersection.get(i);
}

(6)在 Java 中,Set 接口没有 get(int) 方法,因为 Set 是无序且不允许重复的集合,因此不能像列表一样通过索引访问元素。

(7)首先,通过调用 interSet.iterator() 方法获取到集合 interSet 的迭代器,并将其赋值给变量 iterator。

然后,创建一个变量 index,用于表示结果数组 result 中的索引位置。初始值为 0,表示从结果数组的第一个位置开始存放元素。

接着**,使用 while 循环来遍历迭代器。循环条件是迭代器是否还有下一个元素,即调用 iterator.hasNext() 方法。只要集合中还有元素未被遍历,循环就会继续执行。**

在循环体内部,**通过调用 iterator.next() 方法获取迭代器当前位置的元素,并将其赋值给结果数组 result 中的相应位置,即 result[index]。**然后,将 index 的值增加 1,以便下一次循环时可以将下一个元素存放在结果数组中的下一个位置。

这样,当循环结束时,结果数组 result 中就包含了集合 interSet 中的所有元素。
(8)iterator.next() 是迭代器的一个方法,用于获取迭代器当前位置的下一个元素,并将迭代器的位置向后移动一个位置。

具体来说,next() 方法会返回迭代器当前位置的元素,并将迭代器的位置向后移动一位,指向下一个元素。如果迭代器已经到达了集合的末尾,没有更多的元素可供访问,那么调用 next() 方法会抛出 NoSuchElementException 异常。
(9)result[index]=iter.next(); 这行代码的作用是**将迭代器 iter 当前位置的下一个元素赋值给数组 result 的第 index 个位置。**换句话说,它将迭代器指向的当前元素放入数组中。

iter.hasNext() 是迭代器的方法,用于检查迭代器是否还有下一个元素。它返回一个布尔值,如果迭代器还有下一个元素,则返回 true;否则返回 false。

你可以使用 iter.hasNext() 来检查是否还有下一个元素,但是这个方法返回的是一个布尔值,而不是下一个元素的值。
(10)如果 iter 是一个迭代器**,iter.next() 方法会返回迭代器当前位置的元素**,并将迭代器的位置移动到下一个元素。因此,result[index] = iter.next(); 这行代码会将迭代器 iter 当前位置的元素赋值给数组 result 的第 index 个位置。

这意味着,如果你希望第一个元素也被包括在内,你应该先检查是否还有下一个元素,然后再将当前元素赋值给数组。所以你可以使用 iter.hasNext() 方法来检查是否还有下一个元素,然后再调用 iter.next() 方法来获取当前元素。

3.代码实现

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {

        Set<Integer> set1=new HashSet<>();
        Set<Integer> set2=new HashSet<>();

        for(int num:nums1)
        {
            set1.add(num);
        }
        for(int num:nums2)
        {
            set2.add(num);
        }

        //创建一个新的数组集合,用来存放交集
        Set<Integer> interSet=new HashSet<>();

        for(int num:set1)
        {
            if(set2.contains(num))
            {
            interSet.add(num);
            }
        }

        //将结果集合转换成数组
        int[] result=new int[interSet.size()];

        Iterator<Integer> iter=interSet.iterator();
        //Java中的方法名应该使用小写的 iterator(),
        int index = 0;
        while(iter.hasNext())
        {
            result[index]=iter.next();
            index++;
        }

      
        return  result;//return 数组名 ,返回新的数组


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值