17(Set集合的特点,HashSet,TreeSet,Compareable)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Haidaiya/article/details/82914215

1 set集合

回顾9.27日笔记关于collection集合大家族的介绍,set和list的区别有三点:(1)无序(2)无索引(3)不允许重复

相反list集合的特点就是:(1)有序(2)有索引(3)允许重复

那么学习set的重点在于它是如何保证唯一性的。

基本数据类型的数据唯一性还是比较好理解的,那么对象类型它是怎么分辨的呢?其实我猜测是它是根据对象的地址值判断的,如果我们认为同姓名,同年龄是同一个人,该如何操作呢?重写equals方法?重写equals方法是不可以的,需要重写hashcode方法,这里解释一下原理:hashcode和equal的关系,只有hashcode返回的值相同,才会执行equals方法来进行比较,就好比方说上火车,hashcode就相当于车票,当hashcode相同就是座位相同才会调用equals方法比较。

2 HashSet的作用即去重

package com.haidia.Set;

import java.util.HashSet;
import java.util.Scanner;

/*
 * 输入字符串去重后输出字符
 * 因为不需要按照顺序输出,所以用HashSet,如果需要按照顺序可以使用LinkedHashSet
 */
public class Demo1 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str = sc.nextLine();
		char[] strArr = str.toCharArray();
		HashSet<Character> hs = new HashSet<>();
		for (char c : strArr) {
			hs.add(c);
		}
		for (Character character : hs) {
			System.out.println(character);
		}

	}

}

3 TreeSet

TressSet毫无疑问是惟一的,但是它还有另外一个特点就是可以排序的。

既然TreeSet可以排序,那我试试存储对象的时候它是怎么排序的。

很明显,出错了,这是为什么呢,因为TreeSet中的排序依赖的是比较器,只需要在Person上实现Compareable接口就可以了。

排序的原理就是按照compareTo方法返回的值进行排序,具体见下图。

4 复习匿名内部类

猜你喜欢

转载自blog.csdn.net/Haidaiya/article/details/82914215