学完java在LeetCode刷题,经常会使用到HashSet这个数据结构,故在此处作如下
目录
简单了解一下HashSet:
HashSet的显著特点就是:HashSet对象中不能存储相同的数据,存储数据时是无序的。强调一点:HashSet存储元素的顺序并不是按照存入时的顺序;它是按照哈希值来存储数据,所以取数据也是按照哈希值取得。
你可能会想,HashSet的去重特点,HashMap也同样拥有啊,为什么还要用HashSet呢?这就不得不提:HashMap存储数据时是成对(Key,Value)存储的,而HashSet只有Key,没有Value;
什么时候使用HashSet?
利用HashSet的特点,我们可以在判断是否有重复元素、或者去除重复元素时,使用HashSet;
算法中常会用的的HashSet有关方法:
1、add(E e) :如果当前列表中不存在e, 则将e加入列表,返回值类型:boolean
public class Test002 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Tom");
set.add("liming");
boolean jeck = set.add("Jeck");
System.out.println(jeck);//true
}
}
2、contains(Object obj):判断列表中是否有元素 obj; 返回值类型:boolean
public class Test002 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Tom");
set.add("liming");
set.add("Jeck");
System.out.println(set.contains("Tom"));//true
System.out.println(set.contains("tom"));//false
}
}
3、remove(Object obj):如果列表中存在元素 obj,则将其从列表中删除
public class Test002 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Tom");
set.add("liming");
set.add("Jeck");
boolean res = set.remove("Tom");
boolean res1 = set.remove("tom");
System.out.println(res);//true
System.out.println(res1);//false
}
}
4、size():得到列表中元素的个数
public class Test002 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Tom");
set.add("liming");
set.add("Jeck");
int size = set.size();
System.out.println(size);//3
}
}
实战算法题:
题目一:给你一个整数数组 nums
。如果任一值在数组中出现 至少两次 ,返回 true
;如果数组中每个元素互不相同,返回 false
。
解决方法:
class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> set=new HashSet<>();
for(int v:nums){
if(!set.add(v))
return true;
}
return false;
}
}