gpt4 book ai didi

Java:多索引排序缓存或带索引访问的 SortedMap

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:47 25 4
gpt4 key购买 nike

这就是我面临的问题,我正在尝试使用 Id 作为键并使用对象指针作为值来实现 HashMap。

在每个对象中,有几个整数,假设它们代表对象中定义的各种类别的投资金额。

但是,我希望能够对特定类别中的投资金额进行排序并访问第 N 个元素,同时访问键和对象。所以它必须按每个投资金额进行索引。

例子:
Id=1,对象:{ Gas=2000,Tech=5000,Bank=1000}
Id=2,对象:{ Gas=1000,Tech=8000,Bank=2000 }
Id=3,对象:{ Gas=4000,Tech=6000,Bank=3000 }

因此,我希望能够通过对象的 ID 进行查找(简单)。但我也希望能够做一些类似 Gas[0] 的事情来获得 gas 的最高投资(即 Id=3),Tech[2] 以获得第三高的技术投资(即 Id=1)。

像这样的东西应该使用什么样的数据结构?

最佳答案

你可以使用 java.util.SortedSe t 与自定义 Comparator对于您想要的每个额外索引。

Map<Integer, MyClass> byId = new HashMap<Integer, MyClass>();
SortedSet<MyClass> byGas = new TreeSet<MyClass>(new MyGasComparator());
SortedSet<MyClass> byTech = new TreeSet<MyClass>(new MyTechComparator());
...

class MyGasComparator implements Comparator<MyClass> {
@override
public int compare(MyClass a, MyClass b) {
int r = a.getGas() - b.getGas();
if (r != 0) {
return r;
}

// gas is equal, ensure fixed order
return a.getId() - b.getId();
}
}

...

使用上面显示的比较器,byGas().first() 将是具有最大 gas 值的对象,byGas.iterator()byGas.toArray() 会返回按 Gas 降序排序的对象。只需交换比较器中的 a 和 b 即可颠倒顺序。

另外,考虑将索引映射封装在另一个负责添加、删除和查找各种索引类型的值的类中。

关于Java:多索引排序缓存或带索引访问的 SortedMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4148431/

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