
import javautilArrayList;
import javautilHashMap;
import javautilList;
public class Du {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
mapput("one", new Integer(111));
mapput("two", new Integer(22));
mapput("three", new Integer(3333));
List<String> keyList = new ArrayList<String>(mapkeySet());
List<Integer> valueList = new ArrayList<Integer>(mapvalues());
for(int i = 0; i < mapsize(); i++){
Systemoutprint("Key list element: " + keyListget(i));
Systemoutprintln("\nValue list element: " + valueListget(i));
Systemoutprintln();
}
}
}
HashMap是基于哈希表的Map接口的非同步实现。实现HashMap对数据的 *** 作,允许有一个null键,多个null值。
HashMap底层就是一个数组结构,数组中的每一项又是一个链表。数组+链表结构,新建一个HashMap的时候,就会初始化一个数组。Entry就是数组中的元素,每个Entry其实就是一个key-value的键值对,它持有一个指向下一个元素的引用,这就构成了链表,HashMap底层将key-value当成一个整体来处理,这个整体就是一个Entry对象。HashMap底层采用一个Entry数组来保存所有的key-value键值对,当需要存储一个Entry对象时,会根据hash算法来决定在其数组中的位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry对象时,也会根据hash算法找到其在数组中的存储位置, 在根据equals方法从该位置上的链表中取出Entry;
put: (key-value)方法是HashMap中最重要的方法,使用HashMap最主要使用的就是put,get两个方法。
判断键值对数组table[i]是否为空或者为null,否则执行resize()进行扩容;
根据键值key计算hash值得到插入的数组索引 i ,如果table[i] == null ,直接新建节点添加即可,转入6,如果table[i] 不为空,则转向3;
判断table[i] 的首个元素是否和key一样,如果相同(hashCode和equals)直接覆盖value,否则转向4;
判断table[i] 是否为treeNode,即table[i]是否为红黑树,如果是红黑树,则直接插入键值对,否则转向5;
遍历table[i] , 判断链表长度是否大于8,大于8的话把链表转换成红黑树 ,进行插入 *** 作,否则进行链表插入 *** 作;便利时遇到相同key直接覆盖value;
插入成功后,判断实际存在的键值对数量size是否超过了threshold,如果超过,则扩容;
也可参考HashSetput过程:
>
HashMap,中文名哈希映射,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。
HashMap是基于哈希表的 Map 接口的实现。此实现提供所有可选的映射 *** 作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
扩展资料:
因为HashMap的长度是有限的,当插入的Entry越来越多时,再完美的Hash函数也难免会出现index冲突的情况。
HashMap数组的每一个元素不止是一个Entry对象,也是一个链表的头节点。每一个Entry对象通过Next指针指向它的下一个Entry节点。当新来的Entry映射到冲突的数组位置时,只需要插入到对应的链表即可。
参考资料来源:
百度百科-Hashmap
public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = strlength()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((CharacterisWhitespace(strcharAt(i)) == false)) {
return false;
}
}
return true;
}
public static boolean isNotBlank(String str) {
return !StringUtilsisBlank(str);
}
你向Map里put值的时候,就已经有问题了。。。
检查你put那段代码
hm已是一个HashMap的引用如果你知道当前的这个key,可以通过hmget(key)方法来获得value获得key的方法hmkeySet();因为你不知道key是哪个其实该方法就是获得一个key的集合具体可以结合以下例子看看,里面有个迭代器用于遍历的Sets=hmkeySet();//通过keySet方法可获得所有key的集合,放在一个容器Set里面Iteratorit=siterator();//获得一个迭代器引用it,通过siterator方法好比使“指针”指向//set里面的第一个元素的位置while(ithasNext())//set里面如果有下一个{Integerkey=itnext();//返回当前set中的这个元素(因为set中都是放的key,“指针”指向下一个Systemoutprintln(hmget(key));//利用hmget(key)方法获得该key对应的value}
以上就是关于HashMap的值全部取出来,分别存到两个ArrayList中全部的内容,包括:HashMap的值全部取出来,分别存到两个ArrayList中、Map集合:HashMap、TreeMap、HashMap是什么东西等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)