对于数组去重的方法有很多,这里总结了数组去重的三种常用方式,

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);
	}

}

数组去重-LMLPHP

treeset去重排序原理:

数组去重-LMLPHP

hashSet去重原理:

底层数据结构是哈希表,哈希表依赖于哈希值存储添加元素时保证元素唯一,本质底层依赖两个方法:

1,hashCode 2,equals是否相同在HashSet中,基本的操作都是有HashMap底层实现的,因为HashSet底层是用HashMap存储数据的。当向HashSet中添加元素的时候,首先计算元素的hashcode值,然后用这个(元素的hashcode)%(HashMap集合的大小)+1计算出这个元素的存储位置,如果这个位置位空,就将元素添加进去;如果不为空,则用equals方法比较元素是否相等,相等就不添加,否则找一个空位添加。

06-04 07:02