Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 02:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Wie kann ich Arrays sortieren?

Discussion on Wie kann ich Arrays sortieren? within the Java forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Sep 2013
Posts: 465
Received Thanks: 81
Wie kann ich Arrays sortieren?

Hallo Leute,

wie kann ich zwei Arrays sortiert ausgeben lassen? Habe im Internet geschaut, aber ich blicke da immer noch nicht durch.

Bspw. Array hat 9,8,7,6,5 und Array2 hat 4 3 2 1

Kann ich das beides irgendwie zusammen und sortiert ausgeben lassen? Und was bedeutet "merge" ? Danke euch im Voraus !
¤Freakieh¤ is offline  
Old 12/08/2016, 15:54   #2
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
"merge" heißt einfach nur zusammenfügen.


Zwei Arrays kannste zB. so mergen und sortiert ausgeben. Fürs Sortieren gibts Standardmethoden. In deinem Fall wären die beiden Arrays nach dem mergen ja schon absteigend sortiert, deshalb mal ein Beispiel wie man es aufsteigend sortieren würde:
Code:
    public static void main(String[] args) {
        int[] arr1 = new int[]{9, 8, 7, 6, 5};
        int[] arr2 = new int[]{4, 3, 2, 1};

        //ohne Java8 Streams
        int[] result = new int[arr1.length + arr2.length];
        System.arraycopy(arr1, 0, result, 0, arr1.length);
        System.arraycopy(arr2, 0, result, arr1.length, arr2.length);
        Arrays.sort(result);
        System.out.println(Arrays.toString(result));

        //mit Java8 Streams
        System.out.println(Arrays.toString(IntStream.concat(Arrays.stream(arr1), Arrays.stream(arr2)).sorted().toArray()));
    }
Belur is offline  
Thanks
1 User
Old 12/08/2016, 16:39   #3
 
elite*gold: 0
Join Date: Sep 2013
Posts: 465
Received Thanks: 81
Quote:
Originally Posted by Belur View Post
"merge" heißt einfach nur zusammenfügen.


Zwei Arrays kannste zB. so mergen und sortiert ausgeben. Fürs Sortieren gibts Standardmethoden. In deinem Fall wären die beiden Arrays nach dem mergen ja schon absteigend sortiert, deshalb mal ein Beispiel wie man es aufsteigend sortieren würde:
Code:
    public static void main(String[] args) {
        int[] arr1 = new int[]{9, 8, 7, 6, 5};
        int[] arr2 = new int[]{4, 3, 2, 1};

        //ohne Java8 Streams
        int[] result = new int[arr1.length + arr2.length];
        System.arraycopy(arr1, 0, result, 0, arr1.length);
        System.arraycopy(arr2, 0, result, arr1.length, arr2.length);
        Arrays.sort(result);
        System.out.println(Arrays.toString(result));

        //mit Java8 Streams
        System.out.println(Arrays.toString(IntStream.concat(Arrays.stream(arr1), Arrays.stream(arr2)).sorted().toArray()));
    }
Hey, danke dir für die Lösung und Erklärung

Wann genau würde man denn die Lösung mit den Java8 Streams benutzen? Gibt es da irgendwie Empfehlungen, wann man was nutzen sollte oder soll man das nehmen, was einem besser "einleuchtet" und "leichter" zum schreiben ist?
¤Freakieh¤ is offline  
Old 12/08/2016, 16:48   #4
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Würde das nehmen was dir besser gefällt. Oft lassen sich Sachen mit Streams kürzer schreiben bzw. leichter in einem Befehl zusammenfassen. Wird dann aber manchmal auch schwerer lesbar.

Falls Performance ne Rolle spielt könnte das auch ein Grund sein keine Streams zu benutzen. Ich bin mir ziemlich sicher, dass die erste Variante schneller ist Wobei das bei diesen geringen Zeiten natürlich irrelevant ist.
Belur is offline  
Thanks
1 User
Old 12/08/2016, 17:06   #5
 
elite*gold: 0
Join Date: Sep 2013
Posts: 465
Received Thanks: 81
Quote:
Originally Posted by Belur View Post
Würde das nehmen was dir besser gefällt. Oft lassen sich Sachen mit Streams kürzer schreiben bzw. leichter in einem Befehl zusammenfassen. Wird dann aber manchmal auch schwerer lesbar.

Falls Performance ne Rolle spielt könnte das auch ein Grund sein keine Streams zu benutzen. Ich bin mir ziemlich sicher, dass die erste Variante schneller ist Wobei das bei diesen geringen Zeiten natürlich irrelevant ist.
Okay, danke dir Hilfst echt weiter

Kann man die Java8 Streams eigentlich überall anwenden, wo es eine Rückgabe mit System print ln gibt?
¤Freakieh¤ is offline  
Old 12/08/2016, 17:13   #6
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Die System.out.println() Methode hat ja keinen Rückgabewert (void).

Mit Streams kann man sehr viel machen (dieses Beispiel war jetzt eher etwas trivialeres), gibt auch etliche Tutorials dazu. Oft ist das sehr praktisch um Sachen kurz zu fassen.
Belur is offline  
Thanks
1 User
Old 12/09/2016, 17:06   #7
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Quote:
Originally Posted by Belur View Post
Falls Performance ne Rolle spielt könnte das auch ein Grund sein keine Streams zu benutzen. Ich bin mir ziemlich sicher, dass die erste Variante schneller ist Wobei das bei diesen geringen Zeiten natürlich irrelevant ist.
Warum genau sollte das 1. schneller sein ? Und performance ist nie irrelevant.
th0rex is offline  
Old 12/09/2016, 19:23   #8
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Quote:
Originally Posted by C0untLizzi View Post
Warum genau sollte das 1. schneller sein ? Und performance ist nie irrelevant.
Ob Performance relevant ist liegt wohl immer noch am jeweiligen Use-Case. Wenn man eine Webanwendung oder ähnliches hat, machen die paar Nanosekunden keinen Unterschied. Da ist Lesbarkeit etc. wichtiger.

Und warum das 1. Programm schneller ist? Vermutlich weil System.arraycopy nativ implementiert ist und was uU deutlich schneller sein kann. Wobei das bei Arrays dieser Größenordnung ohnehin völlig irrelevant ist. Vllt. werden Streams von der JVM auch nicht so gut optimiert oder ähnliches. Du kannst ja mal selbst messen und gucken was schneller ist

Hier mal eine Messung von mir:
PHP Code:
@State(Scope.Thread)
public class 
Test {

    
int[] arr1 = new int[]{98765};
    
int[] arr2 = new int[]{4321};

    public static 
void main(String[] argsthrows RunnerException {
        
Options opt = new OptionsBuilder()
                .include(
Test.class.getSimpleName())
                .
warmupIterations(1000)
                .
measurementIterations(1000)
                .
timeUnit(TimeUnit.NANOSECONDS)
                .
mode(Mode.AverageTime)
                .
forks(1)
                .
build();

        new 
Runner(opt).run();
    }

    
//@Benchmark 
    
public int[] streamBenchmark() {
        return 
IntStream.concat(Arrays.stream(arr1), Arrays.stream(arr2)).sorted().toArray();
    }

    
//@Benchmark
    
public int[] regBenchmark() {
        
int[] result = new int[arr1.length arr2.length];
        
System.arraycopy(arr10result0arr1.length);
        
System.arraycopy(arr20resultarr1.lengtharr2.length);
        
Arrays.sort(result);
        return 
result;
    }

Mit dem Ergebnis:
Code:
Benchmark             Mode  Cnt    Score   Error  Units
Test.regBenchmark     avgt  1000   79,475 ± 1,531  ns/op
Test.streamBenchmark  avgt  1000  188,236 ± 1,402  ns/op
Und damit siehst du auch, dass sich meine Vermutung bestätigt hat. Streams sind fast immer langsamer als vergleichbare Collections Iterationen oder Ähnliches.
Belur is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[PHP] SQL 2x Sortieren
11/29/2016 - Web Development - 4 Replies
Guten abend, bräuchte mal eure hilfe. Und zwar ich mache gerade eine Ranking liste für einen P-Server, möchte das 2 Sachen Sortiert werden. Die erste sache währe das Level die 2. die Erfahrungspunkte. bis jetz hab ich es geschaft das die mit den höchsten Level, auch platz 1.2.3... sind.
[S]Jemand der Bilder schön Sortieren Vergrößern kann usw [B]50 E*gold
06/12/2012 - elite*gold Trading - 1 Replies
Hallo Ich habe ein wichtiges anliegen was ich spätestens in ein paar h haben muss. Unzwar Brauche ich zb eine Worldpad datei.. Mit 16 bildern und einer Überschrift. Diese bilder sollten alle Mittig sein in einer Größe oder halt wie auch immer
Zahlen sortieren in C
02/10/2011 - General Coding - 13 Replies
Bräuchte nochmal ein klein bisschen hilfe bei einer C aufgabe. Ich muss eine zahlenfolge eingeben maximal 20zahlen und diese sortiert ausgeben, aber jeder durchlauf soll angezeigt werden, soweit so gut das programm läuft auch, jedoch hab ich 2 sachen die mich sehr stören 1. Man muss jetzt -1 eingeben wenn man keine zahlen mehr eingeben möchte, bekomme es aber irgendwie nur so hin, fände es besser wenn man am ende enter drückt und fertig ;) 2. Fänd ich es schöner wenn man nicht nach jeder...
[C++] Sortieren von zufällig erstellten Arrays.
03/18/2009 - C/C++ - 4 Replies
-
taschen sortieren?!
01/14/2007 - World of Warcraft - 1 Replies
tach. soweit ich weiss gibt es einzellne addons wie bagsort die die taschen inhalte (also items) sortieren. leider funzt das nich mehr >_> gibt es UIs oda andere addons, die sone funktion beinhalten? kthnxbye :D



All times are GMT +1. The time now is 02:29.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.