相关疑难解决方法(0)

Java - 关于碰撞处理和get()方法的HashMap混淆

我正在使用a HashMap并且我无法直接回答该get()方法在碰撞情况下的工作原理.

假设n > 1对象放在同一个键中.它们存放在一个LinkedList?它们是否被覆盖,以便只存在那个键中的最后一个对象?他们正在使用其他一些碰撞方法吗?

如果将它们放在a中LinkedList,有没有办法检索整个列表?如果没有,是否有其他内置的Java地图,我可以在其中执行此操作?

就我的目的而言,单独的链接是理想的,就像有冲突一样,我需要能够查看列表并获取有关其中所有对象的信息.在Java中最好的方法是什么?

感谢你的帮助!

java hashmap

4
推荐指数
2
解决办法
9819
查看次数

java - 如果hashCode没有被覆盖会怎么样?

可能重复:
什么是对象哈希码

假设我创建了一个对象,该对象Employee具有id,firstName,lastName和电子邮件,用于实例变量和相应的setter/getter方法.hashCode()如果hashCode()Employee对象存储在集合对象中时不覆盖对象,如何计算?

java hashcode

4
推荐指数
2
解决办法
3万
查看次数

hashcode是否返回内存地址?

可能重复:
什么是对象hashcode
hashCode()和identityHashCode()如何在后端工作?

我不是在讨论String类或任何其他重写hashcode的类.假设我只是创建了一个Object类的新对象,那么hashcode()无论如何都会identityHashCode(Object x)返回true,返回该对象的内存地址?

java hashcode

3
推荐指数
1
解决办法
6561
查看次数

当我的对象调用 hascode 方法时

我怀疑何时会为我的对象调用 hashcode method() 。我重写了 MessageThread 类的 hashcode 方法。

MainActivity.java

        MessageThread messageThread=new MessageThread();

        
        Log.e("hashcode", messageThread.hashCode()+"");
        Messages messages=new Messages();

        messageThread.addMessage(messages);
        Log.e("hashcode after", messageThread.hashCode()+"");
            
Run Code Online (Sandbox Code Playgroud)

消息线程.java

公共类消息线程{

    List<Messages> messages = new ArrayList<Messages>();

    
    public boolean equals(Object o) 
    {

        if((o instanceof MessageThread )&&(((MessageThread)o).getMessages().size()==this.getMessages().size()))
        {
            return true;
        }
        else
        {
            return false;
        }
    }


    public int hashCode()
    {
        return messages.size();
    }

    public List<Messages> getMessages() {
        return messages;
    }


    public void setMessages(List<Messages> messages) {
        this.messages = messages;
    }

    public void addMessage(Messages message)
    {
        messages.add(message);
    }

}
Run Code Online (Sandbox Code Playgroud)

消息.Java

public …
Run Code Online (Sandbox Code Playgroud)

java

1
推荐指数
1
解决办法
603
查看次数

Hashmap +插入顺序

我读到了HashMap,它说没有维护插入顺序.我执行了以下代码,并以相同的顺序返回10,000次响应.

同样在密钥中,我只是将前缀从E更改为M.有人可以帮助解释这种行为吗?

for ( int i = 0; i < 10000; i++ ) {
            Map<String, String> map1 = new HashMap<String, String>();
            map1.put( "E._AUTO", "20");
            map1.put( "E._ITERATIVE", "20");
            map1.put( "E._ANDREW", "20");
            System.out.println(map1);

            Map<String, String> map2 = new HashMap<String, String>();
            map2.put( "M._AUTO", "20");
            map2.put( "M._ITERATIVE", "20");
            map2.put( "M._ANDREW", "20");
            System.out.println(map2);
        }
Run Code Online (Sandbox Code Playgroud)

输出:

{E._ANDREW=20, E._ITERATIVE=20, E._AUTO=20}
{M._ITERATIVE=20, M._AUTO=20, M._ANDREW=20}
Run Code Online (Sandbox Code Playgroud)

java

1
推荐指数
1
解决办法
1779
查看次数

为什么Object.hashCode()没有为看似相同的对象返回相同的值

代码如下:

public class Main {
    public static void main(String[] args) {
        Student a = new Student(10, "Ole");
        Student b = new Student(10, "Ole");

        System.out.println(a.hashCode());
        System.out.println(b.hashCode());
    }
}
Run Code Online (Sandbox Code Playgroud)

对象看起来像这样:

public class Student {
    private int snr;
    private String namn;

    public Student(int snr, String namn) {
        this.snr = snr;
        this.namn = namn;
    }
}
Run Code Online (Sandbox Code Playgroud)

这些是运行代码时的结果:

57651960
441366923
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一些javadoc,但我找不到原因,有人可以解释为什么会这样吗?还有什么我必须做的才能使结果相同?(如果可能的话)

谢谢你的解释:)!现在有道理;)

java object hashcode

-2
推荐指数
1
解决办法
461
查看次数

标签 统计

java ×6

hashcode ×3

hashmap ×1

object ×1