HashSet和TreeSet

HashSet:

示例代码:

public class AboutHashSet {
	public static void main(String[] args) {
		HashSet<Integer> hs = new HashSet<Integer>();
		hs.add(12);
		hs.add(4);
		hs.add(35);
		hs.add(12);
		hs.add(27);
		hs.add(9);
		System.out.println(hs); //无序、唯一
		System.out.println(hs.size());
	}
}

运行结果:

[35, 4, 9, 27, 12]
5
 

数据存储过程:

放入集合的数据

(以Integer为例)

1243512279

调用hasCode()方法,

返回哈希码

1243512279

根据函数计算存储位置

(以y=x%6为例)

045033

调用hashCode()方法主要为了判断存入的位置。

 

特点:无序、不重复(如果存入的数据类型重写了hashCode()和equals()方法)

优点:增删查快

TreeSet:

实例代码:

public class AboutTreeSet {
	public static void main(String[] args) {
		TreeSet<Integer> ts = new TreeSet<Integer>();
		ts.add(12);
		ts.add(6);
		ts.add(15);
		ts.add(3);
		ts.add(12);
		ts.add(1);
		
		System.out.println(ts); 
		System.out.println(ts.size());
	}

}

运行结果:

[1, 3, 6, 12, 15]
5
特点:无序(没有按输入顺序输出),有序(按照从小到大顺序输出),唯一

底层原理:二叉树,中序遍历

TreeSet如果存储的数据类型为自定义类型,则该类必须实现内部比较器(Comparable)并且重写compareTo方法
  例如,按该类中Name属性排序则该方法重写如下
 

public int compareTo(Object= o){
 		return this.getName().compareTo(o.getName));
  }

HashSet和TreeSet的区别:

 

    1、TreeSet 是二叉树实现的,TreeSet中的数据是自动排好序的,不允许放入null值。 

    2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。 

    3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象, hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例 。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值