【发布时间】:2017-06-29 22:43:46
【问题描述】:
我有一系列小数组(由两个双精度组成),其中许多是 相同。例如
{5.0, 15.0}
{5.0, 15.0}
{5.0, 15.0}
{12.0, 8.0}
{10.0, 8.0}
{10.0, 8.0}
我希望能够计算每个数组的数量,即
3 of {5.0, 15.0}
1 of {12.0, 8.0}
2 of {10.0, 8.0}
为此,我尝试使用 LinkedHashMap(链接,因为订单 以后可能会用到):
import java.util.Map;
import java.util.LinkedHashMap;
public class MapArrayInt {
Map<double[], Integer> arrays = new LinkedHashMap<double[], Integer>();
public static void main(String[] args) {
MapArrayInt mapArrayInt = new MapArrayInt();
mapArrayInt.addArray(5.0, 15.0);
mapArrayInt.addArray(5.0, 15.0);
mapArrayInt.addArray(5.0, 15.0);
mapArrayInt.addArray(12.0, 8.0);
mapArrayInt.addArray(10.0, 8.0);
mapArrayInt.addArray(10.0, 8.0);
System.out.println(String.valueOf(mapArrayInt.arrays.get(new double[]{5.0, 15.0})));
System.out.println(String.valueOf(mapArrayInt.arrays.get(new double[]{12.0, 8.0})));
System.out.println(String.valueOf(mapArrayInt.arrays.get(new double[]{10.0, 8.0})));
}
void addArray(double val1, double val2) {
double[] newArray = new double[]{val1, val2};
if (!arrays.containsKey(newArray)) {
arrays.put(newArray, 1);
} else {
arrays.put(newArray, arrays.get(newArray) + 1);
}
}
}
我期待这个输出,
3
1
2
但是得到了,
null
null
null
我对 Java 很陌生,但我怀疑这可能是因为每个 double[] 都算作唯一的,因为它们是不同的实例,即使它们包含相同的两个双精度值。
如果我应该解决这个问题,我该如何解决(有没有更好的方法)?我只需要一个数据结构,让我能够
- 添加
doubles[] - 保留
doubles[]的顺序 - 轻松迭代以获取
doubles[]和所说doubles[]的数量
【问题讨论】:
-
你是对的,为什么你会遇到这个问题,但你能解释一下这是什么for吗?在浮点上进行等式比较(例如查找)通常是个坏主意。
-
你能用
List<Double>代替double[]吗? -
@chrylis A
map代表一个练习;每个double[]代表每个练习的一组,其中val1是代表次数,val2是使用的重量值。通过检索具有相同值的double[]s 的数量,我可以轻松打印出类似3x8 reps of 20kg的内容,其中3是具有值8和20的双精度数。 -
每次向地图添加内容时,都会添加一个新
double[]数组。当您尝试通过arrays.get(new double[]{5.0, 15.0})从中接收值时,您也在创建一个 new 数组,该数组与地图中的引用不同。因此,您在尝试检索条目时会收到null。 -
@ning 从技术上讲,任何需要数组的用例都可以用列表代替。
标签: java arrays data-structures hashmap linkedhashmap