Wie lässt sich ein Array so umsortieren, dass ein gesuchter Wert an der ersten Array-Position erscheint?

Die Methoden Arrays.copyOfRange() und System.arraycopy() ermöglichen es recht einfach, ein Array in Teile zu zerlegen und diese in umgekehrter Reihenfolge neu zu kombinieren.

In der Main-Methode des Beispiels wird zunächst ein Object-Array deklariert und mit fortlaufenden Integer-Werten befüllt. in der Methode getKey() wird dann nach dem Array-Index des Wertes gesucht, der zukünftig an der ersten Position im Array stehen soll. Hierzu werden der Methode das Array und der gesuchte Wert als Parameter übergeben. Das Array wird in der Methode durchlaufen und alle Werte mit dem gesuchten verglichen. Wird der Wert gefunden, so wird ihr Index zurückgegeben. Dies zeigt, dass das hier vorgestellte Verfahren nur das erste Vorkommen des gesuchten Wertes im Array berücksichtigt.
Ist der gesuchte Wert nicht enthalten, so wird 0 zurückgegeben und so das Array später gar nicht erst aufgeteilt wird.

Der gefundene Index wird zusammen mit dem Array der Methode switchParts() übergeben. In ihr werden zwei Teilarrays durch das Kopieren von Bereichen erzeugt. Hierzu werden jeweils das Ausgangsarray, der Start- und der Endindex übergeben.
Durch System.arraycopy() wird schließlich das ursprüngliche Array durch die beiden Teilarrays in umgekehrter Reihenfolge in überschrieben.

import java.util.Arrays;

public class ArrayParts {

    public static void main(String[] args) {
        Object[] arr = new Object[10];
        for (int i=0; i<arr.length; i++){
            arr[i] = new Integer(i);
        }
        int key = getKey(arr, new Integer(6));
        arr = switchParts(arr, key);
        for (Object o : arr)
            System.out.println(o);
    }

    private static int getKey(Object[] arr, Object value) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i].equals(value)) {
                return i - 1;
            }
        }
        return 0;
    }

    private static Object[] switchParts(Object[] arr, int key) {

        Object[] first = Arrays.copyOfRange(arr, 0, key + 1);
        Object[] last = Arrays.copyOfRange(arr, key + 1, arr.length);
        
        System.arraycopy(last, 0, arr, 0, last.length);
        System.arraycopy(first, 0, arr, last.length, first.length);
        
        return arr;
    }
}

Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.