java学习:java容器——Set接口分析

java容器——Set接口

Set容器不包含重复的值,不区分数据存储的顺序。Set接口的实现类有HashSet、TreeSet。另外LinkedHashSet继承了HashSet类。
(1)HashSet实现类
底层使用HashMap实现。将对象存储在HashMap的key值,可以利用HashMap中键不可重复的特性,来保证HashSet中没有重复的数据对象。
下面简单模拟HashSet的实现原理:

public class MyHashSet {
	HashMap map;
	private int size;
	private static final Object PRESENT = new Object();
	public MyHashSet(){
		map=new HashMap();
	}
	public int size(){
		return map.size();	
	}
	public void add(Object obj){
		map.put(obj, PRESENT);//set的不可重复其实就是利用了map里面键的不可重复	
	}
	public static void main(String[] args) {	
		MyHashSet  set =new MyHashSet();
		set.add("aaa");
		set.add(new String("aaa"));
		System.out.println(set.size());	
	}
}

(2)LinkedHashSet实现类
LinkedHashSet继承了HashSet类,但是LinkedHashSet中使用的是LinkedHashMap,LinkedHashSet中的元素顺序是可以保证的,也就是说遍历Map的顺序和插入时的顺序是一致的。

(3)TreeSet实现类
TreeSet也实现了SortedSet接口。底层存储使用的是TreeMap,使用它可以从Set中提取有序的序列,元素必须实现Comparable接口否则按默认字典排序。

由上述分析可见,Set基本上都是基于Map的实现类实现的,通过将Set作为Map中的键值实现Set的不允许有重复值的特性。
推荐:java学习:java容器——Map接口(代码模拟HashMap的底层实现)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值