set集合特点

Set集合

存储元素无序,且唯一。

 

HashSet:

依赖于hashCode()与equals()方法

首先比较哈希值:

若,相同,比较地址值或者equals()

相同,说明元素重复,不添加

不同说明元素不重复,添加到集合中

若,不同,直接添加到集合中

 

若一个类中没有重写hashCode()和equals()则直接继承自Object类

 

当hashCode相同时,equals()不同,会对元素添加到同一个链式结构上,这样做效率低,为此一般让hashCode返回值尽可能的不同。

 

哈希值与对象的成员变量值相关。

 

hashCode返回值一般是把对象的成员变量值相加

若元素是基本类型,直接加值

若元素是引用类型,加哈希值

如:

public class people {

private String name;

private int age;

 

@Override

public int hashCode() {

return this.name.hashCode()+this.age;

}

 

}

但是为了减少误差一般乘以一些数

 

 

 

LinkedHashSet:

唯一的有序的set集合。通过链表与哈希表实现

TreeSet:(排序与唯一)

能够对元素按照某种规则进行排序。

排序有两种方式:

自然排序(调用无参构造)

比较器排序

 

自然排序解析:

真正的比较依赖于compareTo()方法,而这个方法是定义在Comparable接口中,

所以必须实现Comparable接口才可以重写compareTo()方法

 

底层结构是红黑树(一种自平衡的二叉树)取出时按照先序遍历方式取出

 

比较器排序:

让集合的构造方法接受一个比较器接口的子类对象Comparator

猜你喜欢

转载自blog.csdn.net/qq_42070343/article/details/83240149
今日推荐