力扣T349
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1=new TreeSet<>(); //这里又涉及到数组和set的转换了
Set<Integer> set2=new TreeSet<>();
for(int i:nums1)
set1.add(i);
for(int i:nums2)
set2.add(i);
Set<Integer> set3=new HashSet<>();
for(int i:set2)
{
if(set1.contains(i))
set3.add(i);
}
int []arr=new int [set3.size()]; //对于其他集合转为数组,总是要去考虑到指针的问题
int index=0; //treeset可以通过顺序的方法遍历吗?
for(int i:set3)
{
arr[index++]=i;
}
// for(int i=0;i<set3.size();i++)
// {
// arr[i]=set3.get(i); get方法和数组的形式都是不可以的。
// }
return arr;
}
}
这里的集合求交集和350的区别:
这里交集的含义:返回的集合不能有重复的元素 不能有重复的元素这件事,就肯定是用set来实现的了
因此这里只需要遍历其中任何一个集合即可,不像上面仍然遍历两个集合。
学会的事情:
arr转set,仍然是一个个添加的形式
set转arr,那么用迭代器访问set,并且用index作为外面,arr用index一个个添加元素进去。
并且set转array array转set也都知道了。
int index=0; //treeset可以通过顺序的方法遍历吗?
for(int i:set3)
{
arr[index++]=i; //这里是说set转为arr,就是用迭代器遍历set,给arr添加元素
}
中心思想没变:
使用添加、删除、是否包含(都有现成的contains在)这些东西,尽可能不用array 用set list这些其他的集合。
并且treeset treemap帮助查找,减小查找的消耗。
对比它的答案:
意思是说 arr2可以 不去变为set。
原因:arr2不需要添加和删除,也不需要去看是否contains,它只需要进行遍历操作。 那么就不需要变为set
需要把arr1 变为set,因为的话contains操作更方便,一句话就搞定了。
即:其他的容器方便add、remove contains 如果只需要遍历操作,用这个array就行了。
然后array转为set,set转array也都知道了。
来源:https://www.cnblogs.com/startFrom0/p/12630344.html