我有一个整数的2D数组.我希望将它们放入HashMap中.但我想基于Array Index访问HashMap中的元素.就像是:
对于A [2] [5],map.get(2,5)它返回与该键相关联的值.但是如何使用一对键创建hashMap?或者一般来说,多个键:Map<((key1, key2,..,keyN), Value)我可以使用get(key1,key2,... keyN)访问元素.
编辑:发布问题3年后,我想补充一点
我遇到了另一种方式NxN matrix.
数组索引,i和j可被表示为一个单一的key方式如下:
int key = i * N + j;
//map.put(key, a[i][j]); // queue.add(key);
Run Code Online (Sandbox Code Playgroud)
并且可以通过key以下方式从这些指数中恢复指数:
int i = key / N;
int j = key % N;
Run Code Online (Sandbox Code Playgroud) 有没有办法获取实例的唯一标识符?
GetHashCode()对于指向同一实例的两个引用是相同的.但是,两个不同的实例可以(很容易)获得相同的哈希码:
Hashtable hashCodesSeen = new Hashtable();
LinkedList<object> l = new LinkedList<object>();
int n = 0;
while (true)
{
object o = new object();
// Remember objects so that they don't get collected.
// This does not make any difference though :(
l.AddFirst(o);
int hashCode = o.GetHashCode();
n++;
if (hashCodesSeen.ContainsKey(hashCode))
{
// Same hashCode seen twice for DIFFERENT objects (n is as low as 5322).
Console.WriteLine("Hashcode seen twice: " + n + " (" + hashCode + ")");
break; …Run Code Online (Sandbox Code Playgroud) 说我有自己的课
public class MyObj { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
它有一些属性和方法.它不实现equals,不实现hashCode.
一旦我们调用equals和hashCode,默认实现是什么?来自Object类?他们是什么?默认等于如何工作?默认的hashCode如何工作以及返回什么?==只会检查它们是否引用同一个对象,所以这很容易,但是equals()和hashCode()方法呢?
我想在Java中打印对象的"对象引用"以进行调试.即根据情况确保对象是相同的(或不同的).
问题是有问题的类继承自另一个类,它覆盖了toString()和hashCode(),它们通常会给我id.
示例情况:运行多线程应用程序,其中我(在开发期间)想要检查所有线程是否使用相同的资源对象实例.
应该如何在Hibernate中实现模型类的equals和hashcode?常见的陷阱是什么?对于大多数情况,默认实现是否足够好?使用商业密钥有什么意义吗?
在我看来,当考虑到懒惰的提取,id生成,代理等时,很难在任何情况下都能正常工作.
我注意到在Java 6的String源代码中,hashCode只缓存0以外的值.下面的代码片段展示了性能上的差异:
public class Main{
static void test(String s) {
long start = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
s.hashCode();
}
System.out.format("Took %d ms.%n", System.currentTimeMillis() - start);
}
public static void main(String[] args) {
String z = "Allocator redistricts; strict allocator redistricts strictly.";
test(z);
test(z.toUpperCase());
}
}
Run Code Online (Sandbox Code Playgroud)
在ideone.com中运行此命令将提供以下输出:
Took 1470 ms.
Took 58 ms.
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
为了您的娱乐,这里的每一行都是一个散列为0的字符串:
pollinating sandboxes
amusement & hemophilias
schoolworks = perversive
electrolysissweeteners.net
constitutionalunstableness.net
grinnerslaphappier.org
BLEACHINGFEMININELY.NET
WWW.BUMRACEGOERS.ORG
WWW.RACCOONPRUDENTIALS.NET …Run Code Online (Sandbox Code Playgroud) 通常,默认实现Object.hashCode()是内存中对象的已分配地址的某个函数(尽管这不是JLS强制要求的).鉴于VM在内存中分流对象,为什么System.identityHashCode()在对象的生命周期内返回的值永远不会改变?
如果它是"一次性"计算(对象的hashCode计算一次并隐藏在对象标题或其他东西中),那么这是否意味着两个对象可能具有相同的identityHashCode(如果它们碰巧首先在内存中的相同地址)?
我知道String类的hashCode()方法不能保证为不同的String-s生成唯一的哈希码.我看到很多使用将String键放入HashMap-s(使用默认的String hashCode()方法).如果地图put替换了之前使用真正不同的String键放入地图的HashMap条目,则大量此类使用可能会导致严重的应用程序问题.
您将遇到String.hashCode()为不同的String-s返回相同值的场景的几率是多少?当密钥是String时,开发人员如何解决此问题?
我希望byte[]使用使用SHA1Algorithm的哈希给定数组SHA1Managed.
该byte[]散列将来自单元测试.
预期的散列是0d71ee4472658cd5874c5578410a9d8611fc9aef(区分大小写).
我怎样才能做到这一点?
public string Hash(byte [] temp)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
}
}
Run Code Online (Sandbox Code Playgroud) 如果没有覆盖hashCode()方法,那么在Java中的任何对象上调用hashCode()的结果是什么?