我有一个double值的二维数组,我想根据数组中的值将它拆分成一堆数组 例如,如果我有:
{2, 0.0},
{3, 0.0},
{1, 0.0},
{2, 1.0},
{5, 0.0},
{7, 1.0},
{6, 2.0}
我想把它分成像这样的数组
{0.0, 2, 3, 1, 5}
{1.0, 2, 7}
{2.0, 6}
我正在处理的数组可能包含数百行,因此迭代这些列表比检查完整数组更快,如果第二列是相同的,那么
例如,迭代第一个列表需要7 * 6/2 = 21个比较迭代第二个列表需要7个将它拆分,并对列表中的所有内容进行7次比较,即。 {2 / 3,2 / 1,2 / 5。 3 / 1,3 / 5,1 / 5},{2,7},{}
我将如何做这样的事情,还是有更好的方法来比较它们?
答案 0 :(得分:2)
使用HashMap
...
<强> ALGO 强>
1)遍历2D数组的每一行
2)myHashMap.add(arr[i][1], arr[i][0]) // add(key,value)
3)重复
答案 1 :(得分:0)
我建议使用其他数据结构,例如HashMap或HashTable,而不是使用2D数组:https://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html。
这些将允许更快的搜索和更简单的代码。
地图的外观示例:
HashMap map = new HasMap<Double, ArrayList<Integer>>(); //key is the 0.0, 2.0, whatever, and the value mapped is an array of integers that have those values. (2, 3, 1, 5 for 0.0)
但是,导入它可能需要一些时间,但是在完成所有设置之后,您可以执行类似的操作来更新值。假设您要添加10,其值为0.0:
ArrayList<Integer> array = map.get(0.0);
array.add(10);
map.put(0.0, array); //replaces the old value with the updated array.