本章是哈希相关的知识,题目用哈希相关知识来解 ,相关知识:java集合通用方法-优快云博客

注意点一:
利用set集合的不重复性,如果多次存入“同一个数”(即被判定为重复的元素),只有第一个元素会被保留,后续重复的添加操作会被自动忽略。这是 Set 的核心特性:不允许重复元素。
利用Set 的去重特性,可以高效解决需要唯一性约束的问题(如统计不重复元素的数量)。
同样,当集合中已存在元素A,那么再次进行添加元素A时,map.add(nums[i])会返回false,重复元素会返回 false,但被自动忽略,但可以用此作为判断条件。
-
当元素首次出现时:
se.add(nums[i])返回true(添加成功),此时!true为false,不执行remove。- 元素被保留在集合中。
-
当元素重复出现时:
se.add(nums[i])返回false(添加失败),此时!false为true,执行remove。- 元素被从集合中移除。
就是说:没有重复元素,se.add(nums[i])每次都执行添加操作,但只有在没有重复元素的时候才能添加,有重复元素时,添加但添加不成功,同时只有第一个元素会被保留,后续重复的添加操作会被自动忽略。再通过返回的true和false,进行判断是否执行remove删除操作,set集合的元素不重复性,删除set集合中保留的一个不重复元素。
因此:此代码会删除出现偶数次的元素至无,保留出现奇数次的元素。
Set<Integer>se=new HashSet<>();
for(int i=0;i<nums.length;i++){
if(!se.add(nums[i])){// 尝试添加元素,并根据结果判断是否执行移除
se.remove(nums[i]);
}
}
注意点二:
public int singleNumber(int[] nums) {要返回int型数据,在集合中的元素要拿出来,set集合中的元素是无序的,Set没有像List那样的get(int index)方法,
法一:
将set集合转换乘数组,这个数组不是有序的,用 集合.toArray();方法;
toArray() 默认返回 Object[],无法直接指定泛型类型。
Integer[] num = new Integer[objArray.length];
创建一个长度为 objArray.length 的 Integer 类型空数组 num,用于存储转换后的结果
num[i]=(Integer) objArray[i];要注意数据类型转换。
转换为Integer 类型,但方法返回 int,Java 会自动拆箱为基本类型。
class Solution {
public int singleNumber(int[] nums) {
Set<Integer>se=new HashSet<>();
for(int i=0;i<nums.length;i++){
if(!se.add(nums[i])){// 尝试添加元素,并根据结果判断是否执行移除
se.remove(nums[i]);
}
}
Object[] objArray = se.toArray();
Integer[]num=new Integer[objArray.length];
for(int i=0;i<objArray.length;i++) {
num[i]=(Integer) objArray[i];//转换为Integer 类型,但方法返回 int,Java 会自动拆箱为基本类型。
}
return num[0];
}
}
法二:使用迭代器
迭代器(Iterator)的作用
- 迭代器是 Java 中用于遍历集合(如
Set、List)元素的工具。 set.iterator()会返回一个迭代器对象,指向集合的起始位置。
next() 方法的作用
next()方法返回迭代器指向的当前元素,并将迭代器移动到下一个位置。- 在本题中,由于集合中只剩下一个元素,调用
next()会直接返回这个元素。
因为只用一个元素,所以直接返回这个元素。
public int singleNumber(int[] nums) {
Set<Integer> set = new HashSet<>();
for (int i : nums) {
if (!set.add(i)) {
set.remove(i);
}
}
return set.iterator().next();
}
总结:
set结合无序,不重复,使用set.add()或set.remove()返回true或false,set中添加重复元素时,如果已有相同元素,已有的元素不变,后续添加元素不会成功,可以将集合转换成数组,默认是Object,可以进行类型转换,不需要再转化成int型,Java有自动拆箱功能,迭代器可以获取迭其中的下一个元素。

被折叠的 条评论
为什么被折叠?



