gpt4 book ai didi

java - 带有 xyz 键的容器

转载 作者:行者123 更新时间:2023-11-30 09:25:42 24 4
gpt4 key购买 nike

我需要一个快速 容器来存储 Java 中的对象,这些对象具有(静态)XYZ 坐标并且所有对象都具有不同的坐标。基本上是一个网格,但它可能不以 0,0,0 为中心(并且网格中可能缺少部分)。

我尝试使用以整数作为键的 map 并对坐标进行位移,以便为每个坐标创建一个唯一的数字。但是,当数字高于 255(8 位)时,效果就不太好。

数组也不能用作键,因为映射实际上并不查看数组的值,而是查看引用。我也可以使用字符串作为键,但每次我想访问一个对象时,我都需要(重新)构建一个字符串。

现在我正在使用 ArrayList 并遍历所有键,但这真的很慢。那么,什么是最快(且内存效率最高)的对象存储方式?

最佳答案

创建一个自定义类,将自定义的 hashCode() 和 equals() 方法用作键。

public static class Vertex {
public int x, y, z;
public boolean equals(Object o){
if(this == o) return true;
if(!(o instanceof Vertex)) return false;
Vertex v = (Vertex)o;
return x == v.x && y == v.y && z == v.z;
}

public int hashCode(){
// Use whatever prime numbers you like
return x ^ y * 137 ^ z * 11317;
}
}

只要确保您永远不会更改用作键的实例的值即可。

这并不比使用简单整数差很多。它仍然是有效的恒定时间访问。

关于java - 带有 xyz 键的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15190074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com