parent
							
								
									98919aa95d
								
							
						
					
					
						commit
						077ef09c8b
					
				| @ -0,0 +1,50 @@ | ||||
| --- | ||||
| HashSet 和 TreeSet 源码解析 | ||||
| --- | ||||
| 
 | ||||
| #### HashSet | ||||
| 
 | ||||
| HashSet 就是维护一个不包含重复元素的集合。 | ||||
| 
 | ||||
| 它的实现很简单,就是通过 HashMap 来做的。 | ||||
| 
 | ||||
| ```java | ||||
| public class HashSet<E> | ||||
|     extends AbstractSet<E> | ||||
|     implements Set<E>, Cloneable, java.io.Serializable | ||||
| { | ||||
|     private transient HashMap<E,Object> map; | ||||
|     private static final Object PRESENT = new Object(); | ||||
|      | ||||
| 	public HashSet() { | ||||
|         map = new HashMap<>(); | ||||
|     } | ||||
|          | ||||
|     public boolean add(E e) { | ||||
|         return map.put(e, PRESENT)==null; | ||||
|     } | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| #### TreeSet | ||||
| 
 | ||||
| TreeSet 大致的结构和 HashSet 相似,底层组合的是 TreeMap,所以继承了 TreeMap key 能够排序的功能,迭代的时候,也可以按照 key 的排序顺序进行迭代。 | ||||
| 
 | ||||
| ```java | ||||
| public class TreeSet<E> extends AbstractSet<E> | ||||
|     implements NavigableSet<E>, Cloneable, java.io.Serializable | ||||
| { | ||||
| 	private transient NavigableMap<E,Object> m; | ||||
| 	private static final Object PRESENT = new Object(); | ||||
|      | ||||
|     public TreeSet() { | ||||
|         this(new TreeMap<>()); | ||||
|     } | ||||
|      | ||||
|     public boolean add(E e) { | ||||
|         return m.put(e, PRESENT)==null; | ||||
|     } | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| 但是和 HashSet 不同的是,TreeSet 可以实现从头或从尾进行遍历,这时是 TreeSet 定义接口,让 TreeMap 去实现的。 | ||||
					Loading…
					
					
				
		Reference in new issue