Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HashMap put方法_Java_Hashmap - Fatal编程技术网

Java HashMap put方法

Java HashMap put方法,java,hashmap,Java,Hashmap,在Java中使用.put(整数,字符串)时遇到一些问题。 据我所知,当发生冲突时,HashMap会询问To值是否与.equals(Object)相同,如果不是,则这两个值存储在LinkedList中。然而,size()是1,哈希迭代器只显示一个结果,即最后一个结果 除此之外,javaHashMapAPI声明:put 将指定的值与此映射中的指定键相关联。如果 映射之前包含键的映射,旧值为 替换 这不是我到处都读过的 想法 public class HashProblema { publi

在Java中使用
.put(整数,字符串)
时遇到一些问题。
据我所知,当发生冲突时,
HashMap
会询问
To
值是否与
.equals(Object)
相同,如果不是,则这两个值存储在
LinkedList
中。然而,
size()
是1,哈希迭代器只显示一个结果,即最后一个结果

除此之外,java
HashMap
API声明:put

将指定的值与此映射中的指定键相关联。如果 映射之前包含键的映射,旧值为 替换

这不是我到处都读过的

想法

public class HashProblema {

    public static void main(String[] args) {
        HashMap<Integer, String> hash= new HashMap();
        hash.put(1, "sdaaaar");
        hash.put(1, "bjbh");

        System.out.println(hash.size());
        for (Object value : hash.values()) {
            System.out.println(value);
        }
    }
}
公共类哈希问题{
公共静态void main(字符串[]args){
HashMap hash=新的HashMap();
hash.put(1,“sdaaar”);
hash.put(1,“bjbh”);
System.out.println(hash.size());
for(对象值:hash.values()){
系统输出打印项次(值);
}
}
}

值被新键覆盖。大小保持为1,值被更改。这就是它的工作方式,因为键值总是唯一的。不能在一个键上映射多个值。

Java中的HashMap总是存储一个键值对。没有涉及任何链接列表。您所描述的是哈希映射的一般概念(通常在计算机科学课上讲授),但Java的实现是不同的。在这里,每个键始终只有一个值(最后一个值)

但是,您可以自由定义包含列表对象的HashMap。不过,您必须自己跟踪重复和碰撞,然后输出为-:

1
bjbh

由于键的映射存在,它将被替换,并且大小仅为1。

API是最终的参考,这是您必须相信的


当哈希映射中已存在密钥的哈希时,会发生冲突。然后比较关键点的值,如果它们不同,则将条目放置在链接列表中。如果键相同,则会覆盖HashMap中的旧键值。

API文档通常应视为权威文档,除非有充分理由怀疑其准确性

几乎可以肯定的是,您应该忽略任何不将自己标记为“故意”与文档不符的声明,并提供可测试的证据


我谦虚地建议您可能会对链接“冲突”列表的作用感到困惑。Java中的
HashMap
使用链表存储多个值,其中键的哈希代码与一个或多个其他键放在同一个“bucket”中。

但这不是冲突-您输入的是同一个值,所以您只是覆盖了键。“这两个值存储在链表中”-你为什么会这样想?这是在哪里记录或说明的?@Stewart我认为这是对一些哈希映射实现的一些描述的参考,当在各种哈希桶之后有一个链表时。@EvanKnowles在java中关于冲突的哈希映射的实现是使用
独立链接
,而不是
开放寻址
认为Java哈希映射是一个Comp Sci数据结构101'哈希映射实现!它使用一个链表数组来处理两个或多个键进入同一个bucket的情况。教科书。我认为OP在行为(如何行为)和实现(如何工作)之间有点混淆。但是,每个键只有一个值,而不是一个链表。我想这就是OP搞砸的。散列的是键,而不是值。
1
bjbh