gpt4 book ai didi

java - 复合 int 键和值

转载 作者:行者123 更新时间:2023-12-02 10:05:32 26 4
gpt4 key购买 nike

我需要将自定义对象作为值存储在字典中,例如具有两个复合整数键的 datastrukturer。 (复合 ID)

我尝试使用数组作为键,但两者都不起作用,因为我猜这只是指向该数组的指针,用作键

如果我能使用就像这样就完美了

store.put([12,43],myObject);
store.get([12,43]);

最佳答案

int[] 不起作用,因为(参见 equals vs Arrays.equals in Java ):

public static void main(String[] args) throws Exception {
int[] one = new int[] { 1, 2, 3 };
int[] two = new int[] { 1, 2, 3 };

System.out.println(one.equals(two)); // <<--- yields false
}

但是,如果:

Map<List<Integer>, Object> store = new HashMap<>();

然后你可以:

store.put(Arrays.asList(12, 43), myObject);
myObject == store.get(Arrays.asList(12, 43));

或者可能更面向对象 - 创建简单封装 List 的类型 StoreKey:

public final class StoreKey {
private List<Integer> keyParts;

public static StoreKey of(int... is) {
return new StoreKey(IntStream.of(is)
.boxed()
.collect(Collectors.toList()));
}

public StoreKey(List<Integer> keyParts) {
this.keyParts = keyParts;
}

@Override
public int hashCode() {
return keyParts.hashCode();
}

@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof StoreKey)) {
return false;
}

return this.keyParts.equals(((StoreKey) obj).keyParts);
}

}

然后:

Map<StoreKey, Object> store = new HashMap<>();
store.put(StoreKey.of(12, 43), myObject);

最后,我们可以看到这将作为关键,因为:

public static void main(String[] args) throws Exception {
StoreKey one = StoreKey.of(1, 2, 3);
StoreKey two = StoreKey.of(1, 2, 3);

System.out.println(one.equals(two)); // <<--- yields true
}

关于java - 复合 int 键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55366394/

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