Java中的Collection和Map(四)--Set体系
2016-03-01 16:35
471 查看
我们都知道,除了我们常用的List集合还存在Set 集合,Set集合中我们常用的有 HashSet 、TreeSet、LinkedHashSet。下面我们来看下他们底层的实现:
构造方法:
我们在通过构造方法创建一Set 集合的时候,实际上底层创建了一Map 集合。
add(E e) 方法:
如果这里你忘记了Map 类的put 实现,可以去翻看一下 Map的put方法实现--Java中的Collection和Map(三) 地址:http://www.cnblogs.com/gaohuiqian/p/5227014.html。
从这里我们可以看出,Set 集合是利用map 集合来进行存储的,key 存放Set 中的元素,Value 存放的是Object 对象。map 集合中的key是不可以重复的,这从侧面也说明了Set 集合能去重的原因。而且Map 集合中key 所需具备的一些条件,也正是Set 集合存放元素的条件。
构造方法:
由此我们可以看出TreeSet 底层是依据TreeMap 实现的。
add(E e) 方法
构造方法:
在LinkedHashSet 的构造方法中调用了 HashSet 的构造方法。 创建了一个LinkedHashMap。
1、HashSet
HashSet 底层是hash表结构的集合。构造方法:
public HashSet() { map = new HashMap<>(); }
我们在通过构造方法创建一Set 集合的时候,实际上底层创建了一Map 集合。
add(E e) 方法:
public boolean add(E e) { return map.put(e, PRESENT)==null; } private static final Object PRESENT = new Object(); //
如果这里你忘记了Map 类的put 实现,可以去翻看一下 Map的put方法实现--Java中的Collection和Map(三) 地址:http://www.cnblogs.com/gaohuiqian/p/5227014.html。
从这里我们可以看出,Set 集合是利用map 集合来进行存储的,key 存放Set 中的元素,Value 存放的是Object 对象。map 集合中的key是不可以重复的,这从侧面也说明了Set 集合能去重的原因。而且Map 集合中key 所需具备的一些条件,也正是Set 集合存放元素的条件。
2、TreeSet
TreeSet底层是树形结构:构造方法:
public TreeSet() { this(new TreeMap<E,Object>()); }
由此我们可以看出TreeSet 底层是依据TreeMap 实现的。
add(E e) 方法
public boolean add(E e) { return m.put(e, PRESENT)==null; }
3、LinkedHashSet
LinkedHashSet 底层依赖LinkedHashMap实现,它是HashSet 的子类:构造方法:
public LinkedHashSet() { super(16, .75f, true); } HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); }
在LinkedHashSet 的构造方法中调用了 HashSet 的构造方法。 创建了一个LinkedHashMap。
相关文章推荐
- Java 依赖注入标准 JSR-330 简介
- 关于java中泛型问题
- java动态代理与AOP
- java, 字符串String,方法
- java下的IO操作
- Java 9终于要包含Jigsaw项目了
- 性能调优之Java系统级性能监控及优化
- Java中获取完整的url
- [置顶] eclipse 设置默认编码为Utf-8 详细教程。
- 经典搜索(深搜+剪枝+Java细节注意)
- java解决方案,技术型的
- SPRING IN ACTION 第4版笔记-第二章-004-Bean是否单例
- Java锁机制
- myeclipse
- myeclipse
- SPRING IN ACTION 第4版笔记-第二章-003-以Java形式注入Bean、@Bean的用法
- Java多线程(四)——线程阻塞四种情况与守护线程
- idean Error:java: 无效的目标发行版: 1.8
- eclipse常见用法
- eclipse提示adt版本过低