集合框架Set

    xiaoxiao2021-04-15  284

    Set集合

    1.集合框架Set(HashSet哈希表存储、重复元素存储底层探究)

    1.1 HashSet的特点(根据版本原因有些版本是有序的) 元素是无序(存入和取出的顺序不一定一致),元素不可以重复; hashset本身具备去重的功能 1.2 重复元素存储底层探究 /** * 返回值代表着容器中的具体的位置坐标 */ @Override public int hashCode() {

    return this.getName().hashCode()+this.age;//可以减少调用次数提高去重的效率 } @Override //当person这个人的名字相等,年龄相等,就存在集合中堆内存里的同一个引用地址 public boolean equals(Object obj) { if(obj instanceof Person) { Person p = (Person) obj; //this.name还没有 // p.getName()已经存进去了 System.out.println(this.getName()+"equals"+ p.getName()); return this.getName().equals(p.getName())&& this.getAge()==p.getAge(); } return false; } @Override public String toString() { // TODO Auto-generated method stub return "Person [name="+name+",age="+age+"]"; }

    注意 HashSet是如何保证元素唯一性的呢?

    是通过元素的两个方法:hashCode与equals方法来完成; 如果hashCode值相同,才会判断equals是否为true; 如果hashCode值不同,那么不会调用equals。

    2、集合框架TreeSet(自然排序、比较器排序)

    2.1 自然排序的用途
    使添加的元素自身具备排序规则,这种排序规则又被称为自然排序

    易错点 如果只放一个元素,就汇报类型转换异常

    2.2

    按年龄排序
    /** *正数:后面的0必当前(this)大 *0代表相等 */ @Override public int compareTo(Person o) { int num = this.getAge() - o.getAge(); if(num==0) { return this.getName().compareTo(o.getName()); } return num; }

    }

    2.3

    比较器排序

    比较器comparator接口的作用: 使得容器具有比较性

    /**

    定义一个比较person的比较器规则:先按姓氏,再按年龄先主要条件再次要条件,如果不按这个规则来,那么就会数据丢失

    */

    class PersonComp implements Comparator{ public int compare(Person o1, Person o2) { int num = o1.getName().compareTo(o2.getName()); if(num==0) { return o1.getAge() - o2.getAge(); } return num; } }

    3.泛型

    3.1什么时候定义泛型类?

    当类中要操作的引用数据类型不确定的时候, 早期定义Object来完成扩展,现在定义泛型来完成扩展 将运行时的异常转移到编译时期

    3.2 泛型方法

    泛型类定义的泛型,在整个类中有效,如果被方法调用,

    那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。

    为了让不同方法可以操作不同的类型,而且类型还不确定。

    那么可以将泛型定义在方法上。


    最新回复(0)