HashSet底层的数据结构是哈希表,哈希表是存放了一堆哈希值的一张表,存的顺序是按照哈希值存的,在存入时要先判断哈希值,如果哈希值一样了,再判断是否是同一对象,所以HashSet为了保证元素的一致性,要通过两个方法来完成即:hashCode()和equals(),hashCode()方法来判断元素的哈希值是否相同,如果相同,再通过equals()方法判断是否是同一个对象,如果元素的哈希值不同,就不会调用equals()方法,我们使用基本数据类型或系统中提供的引用类型作为元素放到HashSet时.在使用添加,删除,判断时,人家已经都复写好了,所以我们只是拿来用,但是如果是我们自己定义了一个类,要把这个类产生的对象,放到HaseSet中并要使用集合中的一些方法时,就要在自定义的类中覆写hashCode()方法和equals()方法,使我们自定义的类也具有可以比较功能;
对于TreeSet集合,你在往里存入数据时,该集合就会对里面的元素进行排序,它是以ASCII码表进行排序的,从此可见,只有那些可以用ASCII表来表示的元素可以不用写比较的方法,直接添加到TreeSet集合中,只要是我们自定义的类,都要覆写比较的方法,这样在使用TreeSet集合存入元素时,它才知道怎么存放,所以一定要实现Comparable接口覆写compareTo()方法或继承Comparator类覆写compare()方法
总之,为了方法使用,我们一般在定义一个类时,都要覆写hashCode()方法和equals()和实现Comparable接口覆写compareTo()方法或继承Comparator类覆写compare()方法,不管这个类的对象以后是否会使用到集合 |