/ / teilen und sortieren Array in mehrere Arrays - Java, Arrays, dynamische

Teilen und sortieren Sie Array in mehrere Arrays - Java, Arrays, dynamische

Ich habe ein 2D-Array von doppelten Werten und ich möchte es in eine Reihe von Arrays basierend auf einem Wert im Array aufteilen Zum Beispiel, wenn ich hatte:

{2, 0.0},
{3, 0.0},
{1, 0.0},
{2, 1.0},
{5, 0.0},
{7, 1.0},
{6, 2.0}

Ich möchte das in solche Arrays aufteilen

{0.0, 2, 3, 1, 5}
{1.0, 2, 7}
{2.0, 6}

Die Arrays, mit denen ich mich beschäftige, können mehrere enthaltenhundert Zeilen, so würde es schneller sein, durch jede dieser Listen zu iterieren, als das volle Array zu überprüfen, und wenn die zweite Spalte dasselbe ist, etwas zu tun

Zum Beispiel dauert das Durchlaufen der ersten Liste 7 * 6/2 = 21 Vergleiche

das Durchlaufen der zweiten Listen dauert 7, um es aufzuteilen, und 7 Vergleiche von allem innerhalb der Listen, dh. {2/3, 2/1, 2/5. 3/1, 3/5, 1/5}, {2,7}, {}

Wie würde ich etwas so machen, oder gibt es einen besseren Weg, sie zu vergleichen?

Antworten:

2 für die Antwort № 1

Es wäre nur eine Iteration mit HashMap ...

Algo

1) traverse jede Reihe von 2D-Array

2) myHashMap.add(arr[i][1], arr[i][0]) // add(key,value)

3) wiederhole


0 für die Antwort № 2

Anstatt ein 2D-Array zu verwenden, würde ich eine andere Datenstruktur wie HashMap oder HashTable empfehlen: https://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html.

Dies ermöglicht schnellere Suchen und einfacheren Code.

Beispiel, wie Ihre Karte aussehen könnte:

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)

Das Importieren kann jedoch etwas dauern, aber nachdem Sie alles eingerichtet haben, können Sie etwas tun, um die Werte zu aktualisieren. Angenommen, Sie möchten 10 hinzufügen, deren Wert 0.0 ist:

ArrayList<Integer> array = map.get(0.0);
array.add(10);
map.put(0.0, array); //replaces the old value with the updated array.