Java--hashSet和TreeSet的区别

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

Java–hashSet和TreeSet的区别

1. hashSet

底层是使用了哈希表来支持的,特点: 存取速度快.

实现原理:
往Haset添加元素的时候,HashSet会先调用元素的hashCode方法得到元素的哈希值 ,然后根据元素 的哈希值经过一系列的运算,就可以算出该元素在哈希表中的存储位置。

  • 如果算出元素存储的位置目前没有存储任何元素,那么元素就可以直接存储到该位置上。
  • 如果算出该元素的存储位置目前已经存在有其他的元素了,那么会调用该元素的equals方法与该位置的元素再比较一次;如果equals返回值是true,那么该元素与这个位置上的元素就会被视为重复元素,不允许添加,反之,则可以添加。

2. TreeSet

底层是使用了红黑树(二叉树)数据结构实现的, 特点:会对元素进行排序存储。

  1. 往TreeSet添加元素的时候,如果元素本身具备自然顺序的特性,那么就会自动对元素就行排序。
  2. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么元素所属的类必须要实现Comparable接口,把元素的比较规则定义在CompareTo方法中。
  3. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,而且元素所属的类没有实现COmparable接口,那么必须要在创建TreeSet对象的时候传入比较器。例如:
//自定义一个比较器
class MyComparator implements Comparator<Person>{

	@Override
	public int compare(Person p1, Person p2) {
		return p1.id-p2.id;
	}
}
  1. 如果比较的方法(CompareTo 或者Compare )返回的是0的时候,那么该元素就被视为重复元素,不允许被添加。

猜你喜欢

转载自blog.csdn.net/ScongHW/article/details/83342034