问题: 给定一个数组,判断其是否有重复项,如果有重复项返回true,否则返回false。
方法1 利用Arrays.sort
public class Solution {
public boolean containsDuplicate(int[] nums) {
if (nums.length<2)
{ return false; }
else
{
int i,j=0;
Arrays.sort(nums);//对数组进行排序
for (i=0;i<(nums.length-1);i++)
{
if (nums[i]==nums[i+1])//判断前后两个元素是否相等
{ j=1; break; } //如果存在重复元素,标记1
}
if (j==1)
{ return true; }
else { return false; }
}
}
方法2 利用HashSet
public class Solution {
public boolean containsDuplicate(int[] nums) {
if(nums.length<2)//不包含重复项
return false;
HashSet<Integer> a=new HashSet();//利用哈希表
for(int n:nums)
{
if(!a.add(n)) return true;//如果已经包含已有元素,即有重复项
}
return false;
}
}
HashSet 的用法
- 构造方法
- HashSet()
构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75。 - HashSet(Collection< extends E> c)
构造一个包含指定 collection 中的元素的新 set。
-HashSet(int initialCapacity)
构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和默认的加载因子(0.75)。 - HashSet(int initialCapacity, float loadFactor)
构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和指定的加载因子。
- HashSet()
- 方法摘要
- boolean add(E e)
如果此 set 中尚未包含指定元素,则添加指定元素。 - void clear()
从此 set 中移除所有元素。 - Object clone()
返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。 - boolean contains(Object o)
如果此 set 包含指定元素,则返回 true。 - boolean isEmpty()
如果此 set 不包含任何元素,则返回 true。 - Iterator< E > iterator()
返回对此 set 中元素进行迭代的迭代器。 - boolean remove(Object o)
如果指定元素存在于此 set 中,则将其移除。 - int size()
返回此 set 中的元素的数量(set 的容量)。
- boolean add(E e)