我正在使用a HashMap并且我无法直接回答该get()方法在碰撞情况下的工作原理.
假设n > 1对象放在同一个键中.它们存放在一个LinkedList?它们是否被覆盖,以便只存在那个键中的最后一个对象?他们正在使用其他一些碰撞方法吗?
如果将它们放在a中LinkedList,有没有办法检索整个列表?如果没有,是否有其他内置的Java地图,我可以在其中执行此操作?
就我的目的而言,单独的链接是理想的,就像有冲突一样,我需要能够查看列表并获取有关其中所有对象的信息.在Java中最好的方法是什么?
感谢你的帮助!
可能重复:
什么是对象哈希码
假设我创建了一个对象,该对象Employee具有id,firstName,lastName和电子邮件,用于实例变量和相应的setter/getter方法.hashCode()如果hashCode()在Employee对象存储在集合对象中时不覆盖对象,如何计算?
我不是在讨论String类或任何其他重写hashcode的类.假设我只是创建了一个Object类的新对象,那么hashcode()无论如何都会identityHashCode(Object x)返回true,返回该对象的内存地址?
我怀疑何时会为我的对象调用 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) 我读到了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) 代码如下:
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,但我找不到原因,有人可以解释为什么会这样吗?还有什么我必须做的才能使结果相同?(如果可能的话)
谢谢你的解释:)!现在有道理;)