String源码(1)
String是最常用的类没有之一,现在开始看一些String的源码。 先看String的hashCode实现。 /** * Returns a hash code for this string. The hash code for a * {@code
String是最常用的类没有之一,现在开始看一些String的源码。 先看String的hashCode实现。 /** * Returns a hash code for this string. The hash code for a * {@code
jdk8新方法forEach更好的遍历map数组进行操作了。 现在先看看以前的遍历写法: 以前总结的: String key = null; String value = null; for(Map.Entry<String,String> entry:map.entrySet()){ key = entry.getKey(); value = entry.getValue(); System.out.println("key;"+ key+",value:"+value); } for(String key:
hashmap里面的这个merge方法,融合的意思,将新的value和旧的value进行融合。 @Override public V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) { if (value == null) throw
这个和之前的两个方法相同。 @Override public V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) { if (remappingFunction == null) throw new NullPointerException(); int hash = hash(key); Node<K,V>[] tab; Node<K,V> first; int n, i; int binCount = 0; TreeNode<K,V> t = null; Node<K,V> old = null; if (size > threshold || (tab = table) == null ||
这个方法和computeIfAbsent这个都是Java8的新的内容,都是可以在添加map的时候添加一个方法来对key进行操作存储value
这个是Java8里面新增的功能 代码: public V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) { if (mappingFunction == null) throw new NullPointerException(); int hash = hash(key); Node<K,V>[] tab; Node<K,V> first; int n, i; int binCount = 0; TreeNode<K,V> t = null; Node<K,V> old = null; if (size > threshold || (tab = table) == null
HashMap#put() /** * Associates the specified value with the specified key in this map. * If the map previously contained a mapping for the key, the old * value is replaced. * * @param key key with which the specified value is to be associated * @param value value to be associated with the specified key * @return the previous value associated with <tt>key</tt>, or * <tt>null</tt> if there was
HashMap#resize() 在HashMap源码(2)最后有相关源码: 源码的注释翻译为: 初始化或者翻倍表大小。如果表为null,则根据存放在threshold变量中的
HashMap#hash() 为什么要有HashMap的hash()方法,难道不能直接使用KV中K原有的hash值吗?在HashMap的put、get操作时为什么不能直
HashMap初始化 初始化的几种情况: /** * Constructs an empty <tt>HashMap</tt> with the specified initial * capacity and load factor. * * @param initialCapacity the initial capacity * @param loadFactor the load factor * @throws IllegalArgumentException if the initial capacity is negative * or the load factor is nonpositive */ public HashMap(int initialCapacity, float loadFactor) {
常量定义 1.默认容量 /** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 默认初始化的容量是16,必须是2的幂。 2.最大容量 /** * The maximum capacity, used if a higher value
现在聊LinkedList的peek操作,这个操作都是进行输出参数,不会删除相关Node的。 /** * Retrieves, but does not remove, the first element of this list, * or returns {@code null} if this list is empty. *
在使用List的 时候经常是ArrayList和LinkedList他们两个各有千秋,根据自己的业务使用情况来使用,现在咱们看看LinkedL
现在接着说ArrayList的另外一个常用方法remove(). remove同样也是存在两个方法 1. public E remove(int index) { rangeCheck(index); modCount++; E oldValue = elementData(index); int numMoved = size - index - 1; if
ArrayList继承了AbstractList并实现了List接口。 三种初始化的方法: 第一种:规定List长度的参数 public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) throw new
前两篇写了add和remove相关的源码,现在剩下的是零散的一些和Itr、SubList、ListItr几个相关的代码,这些应用次数也多但是