HashSet
底层是一种哈希表(桶状结构),它保证元素唯一,存储和取出不一致(无序性)
使用HashSet存储自定义对象,并且保证自定义对象不重复的,add(Object obj)---->HashMap<K,V>集合
put(K key,V value)----->最终依赖于public int hashCode() /boolean equals(Object e)
需要在自定义的类中重写hashCode() 和equals()方法,就可以将重复的对象去除掉!
TreeSet
有两种排序方式:
自然排序
选择器排序
TreeSet集合是一种红黑树结构----->依赖于TreeMap<K,V>
TreeSet里面的add方法---->TreeMap集合的put方法
TreeSet():无参构造
执行Compareable : compareTo(Objectt e) 自然排序
TreeSet(Comparator comparator)(有参构造)
执行Comparator:compare(Object obj1,Obejct obj2):选择器排序
自然排序:
学生类中:实现Compareable接口
重写public int CompareTo(Student s){
int num = this.age - s.age ; //主要条件
如果年龄一样,比较内容是否一样:姓名的内容
//次要条件
int num2 = (num==0)? (this.name.compareTo(s.name)):num ;
return num2 ;
}
存储进来将第一个元素作为根节点,后面定义元素依次和根节点进行比较比根节点小,作为左孩子 : (在左边存储) ,比根节点大,作为右孩子 : (在右边存储),相等的话,存储以前的元素即可!
按照学生的姓名长度从小到大
public int compareTo(Student s){
//主要条件:
int num = this.name.length()-s.name.length();
//次要条件:姓名长度一样,比较内容是否一样
int num2 = (num==0)?(this.name.compareTo(s.name)):num;
//次要条件:姓名长度一样,内容也一样,比较年龄是否相同
int num3 =(num2==0)? (this.age-s.age):num2 ;
return num3 ;
}