专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
复利大王  ·  wtf,金融机构一个比一个乱 ·  昨天  
复利大王  ·  某大厂要求外包必须定点吃饭 ·  昨天  
复利大王  ·  这届清华状元就业开始疯狂下沉 ·  昨天  
复利大王  ·  总行打工人婚恋情况 ·  2 天前  
复利大王  ·  现在已经没有体面的工作了 ·  2 天前  
51好读  ›  专栏  ›  安卓开发精选

Android HashMap 源码详解(上)

安卓开发精选  · 公众号  · android  · 2016-09-18 08:31

正文

请到「今天看啥」查看全文


, ?> e = ( Entry , ?> ) o ;

return Objects . equal ( e . getKey (), key )

&& Objects . equal ( e . getValue (), value );

}

@Override public final int hashCode () {

return ( key == null ? 0 : key . hashCode ()) ^

( value == null ? 0 : value . hashCode ());

}

@Override public final String toString () {

return key + "=" + value ;

}

}


我们看到他有4个变量,其中的key和value就是我们常见的两个,而另外的两个是存储HashMapEntry的时候用的,其中他还有几个的方法,因为我们知道HashMap是一个数组加链表的形式存储的,hashCode是用来判断存储在哪个数组里面的,equals判断是否是同一个对象,HashMap存储的其实就是HashMapEntry。


我们再看HashMap的另外一个构造方法


private static final int MINIMUM_CAPACITY = 4 ;

/**

* Max capacity for a HashMap. Must be a power of two >= MINIMUM_CAPACITY.

*/

private static final int MAXIMUM_CAPACITY = 1 30 ;

………………………

public HashMap ( int capacity ) {

if ( capacity 0 ) {

throw new IllegalArgumentException ( "Capacity: " + capacity );

}

if ( capacity == 0 ) {

@SuppressWarnings ( "unchecked" )

HashMapEntry K , V > [] tab = ( HashMapEntry K , V > []) EMPTY_TABLE ;

table = tab ;

threshold = - 1 ; // Forces first put() to replace EMPTY_TABLE

return ;

}

if ( capacity MINIMUM_CAPACITY ) {

capacity = MINIMUM_CAPACITY ;

} else if ( capacity > MAXIMUM_CAPACITY ) {

capacity = MAXIMUM_CAPACITY ;

} else {

capacity = Collections . roundUpToPowerOfTwo ( capacity );

}

makeTable ( capacity );







请到「今天看啥」查看全文