将数组拆分并排序为多个数组

时间:2014-11-26 19:03:16

标签: java arrays dynamic

我有一个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},{}

我将如何做这样的事情,还是有更好的方法来比较它们?

2 个答案:

答案 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.