对于数组去重的方法有很多,这里总结了数组去重的三种常用方式,
public class Test {
public static void main(String[] args) {
/**
* 第一种方式,虽然去重了,但是不能排序
*/
//定义一个数组
int[]str={5,5,5,3,1,4,72,1,2,3};
//定义一个集合
List<Integer> list = new ArrayList<>();
//遍历整个数组
for (int i = 0; i < str.length; i++) {
//如果集合不包含这个数字就添加
if(!list.contains(str[i])){
list.add(str[i]);
}
}
System.out.println("第一种"+list);
/**
* 第二种方式:去重加排序
* TreeSet不仅可以使元素不重复,而且可以实现排序等功能的集合
*/
Integer[]str2={5,5,5,3,1,4,72,1,2,3};
//Arrays.asList()是将一个数组转化为一个List对象
TreeSet<Integer> set = new TreeSet<>(Arrays.asList(str2));
Iterator<Integer> i = set.iterator();
while(i.hasNext()){
System.out.println("第二种"+i.next());
}
/**
* 用set和list实现去重
*/
int[]str3={5,5,5,3,1,4,72,1,2,3};
List<Integer> arrayList = new ArrayList<>();
Set<Integer> numSet = new HashSet<Integer>();
for (Integer newstr : str3) {
arrayList.add(newstr);
numSet.addAll(arrayList);
}
System.out.println(numSet);
}
}
treeset去重排序原理:
hashSet去重原理:
底层数据结构是哈希表,哈希表依赖于哈希值存储添加元素时保证元素唯一,本质底层依赖两个方法:
1,hashCode 2,equals是否相同在HashSet中,基本的操作都是有HashMap底层实现的,因为HashSet底层是用HashMap存储数据的。当向HashSet中添加元素的时候,首先计算元素的hashcode值,然后用这个(元素的hashcode)%(HashMap集合的大小)+1计算出这个元素的存储位置,如果这个位置位空,就将元素添加进去;如果不为空,则用equals方法比较元素是否相等,相等就不添加,否则找一个空位添加。