HashMap的值全部取出来,分别存到两个ArrayList中

HashMap的值全部取出来,分别存到两个ArrayList中,第1张

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是什么东西等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9418965.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存