Java集合之Set —— HashSet、TreeSet及LinkedHashSet

神图镇楼

集合

1.HashSet

内部由哈希表实现,HashSet中的数据是无序的(说是无序,其实只是对coder而言,底层还是有一套算法实现排序的),可以放入null,存储对象不重复。

public static void main(String[] args) {
		Set<Object> hashSet = new HashSet<Object>();
		hashSet.add(1);
		hashSet.add(null);
		hashSet.add(1);
		hashSet.add(4);
		hashSet.add("5");
		hashSet.add("0");
		System.out.println(hashSet);
}

输出结果:[null, 0, 1, 4, 5]

2.TreeSet

内部由二差树(红黑树的数据结构)实现,TreeSet中的数据是自动排好序的,不允许放入null值,由于需要排序比较,所以元素必须是同一类型的(其实也解释了为何不能放入null),并且存储对象不重复。

public static void main(String[] args) {
		Set<Object> treeSet = new TreeSet<Object>();
		treeSet.add(1);
		treeSet.add(1);
		treeSet.add(4);
		treeSet.add(5);
		treeSet.add(0);
		System.out.println(treeSet);
}

输出结果:[0, 1, 4, 5]
当放入null时:java.lang.NullPointerException
当放入不同类型对象时:java.lang.ClassCastException

3.LinkedHashSet

内部使用链接表维护元素次序(插入顺序),可以放入null,存储对象不重复。

public static void main(String[] args) {
		Set<Object> linkedHashSet = new LinkedHashSet<Object>();
		linkedHashSet.add(1);
		linkedHashSet.add(null);
		linkedHashSet.add(1);
		linkedHashSet.add("");
		System.out.println(linkedHashSet);
}

输出结果:[1, null, ]

总结:

当你想要强行给插入的元素维护一个想要的顺序时,应该使用TreeSet(实现Comparable接口并重写compareTo方法);当你想要元素顺序与插入顺序一致时,应该使用LinkedHashSet;其它情况应该使用HashSet,因为它的性能最优。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值