gpt4 book ai didi

java - 在Java中访问2D map ( map 的 map )最有效的方法?

转载 作者:行者123 更新时间:2023-12-01 23:49:56 25 4
gpt4 key购买 nike

我正在为推荐系统实现 WeightedSlopeOne 预测算法,在代码中的某个时刻我需要有 2 个 2D map ,一个 Map<Integer, Map<Integer, Integer>>和一个Map<Integer, Map<Integer, Double>>

正如您所知,访问这些并分配值是一个繁琐的过程:

//The following 20 lines are 1 line in Python. Sigh...
HashMap<Integer, Integer> freqsForItem1 = frequencies.get(curItemID);
//See if we have a value for curItemID
if (freqsForItem1 == null) {
freqsForItem1 = new HashMap<Integer, Integer>();
freqsForItem1.put(curItemID_2, 1);
frequencies.put(curItemID, freqsForItem1);
}
else {//See if we have a value for curItemID+curItemID_2
Integer freqForItem1Item2 = freqsForItem1.get(curItemID_2);
if (freqForItem1Item2 == null) {
//If we don't have a value for item1+item2 we just put 1
freqsForItem1.put(curItemID_2, 1);
}
else {//We already have a value for curItemID+curItemID_2
//So we just increment it
freqsForItem1.put(curItemID_2, freqForItem1Item2 + 1);
}
}

那么我应该在这里使用什么来代替 Map<K1, Map<K2, V>> ,或者如果没有更好的数据结构可用,那么访问和更改此类 Map 的值的更好方法是什么?

最佳答案

您可以创建一个新的、不可变的类(使用 properly implemented equals() and hashCode() methods! )来存储两个整数键,并使用那个作为更简单的映射的键,而不是使用映射的映射。

class MyKey {
int first;
int second;
// etc...
}

Map<MyKey, Integer> freqs = new HashMap<MyKey, Integer();

这将极大地简化访问和分配值,如果您决定需要使 key 更复杂,则更是如此。

关于java - 在Java中访问2D map ( map 的 map )最有效的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16441836/

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