2017-10-11 3 views
0

I have 2 ArrayListstri pour 2 arraylist que chacun d'entre eux représentent coordonnées x et y

ValX [9 8 6 5 4 3 2 -10]
Yval [3 6 5 7 9 1 8 10 ]

Je veux trier xVal dans l'ordre croissant et j'ai également yVal correspondant à déplacer lorsque xVal est trié.

résultat serait donc

xVal: [-10 2 3 4 5 6 8 9]
Yval: [10 8 1 9 7 5 6 3]

Merci pour le temps de l'expliquer

+1

rendre la vie simple pour votre auto et créer une classe avec des champs x et y, Construire cependant de nombreux objets nécessaires, puis le stocker dans une liste et le trier. –

+2

N'utilisez pas de réseaux parallèles. Java est un langage orienté objet. Utilise le. Créez une classe avec la paire de valeurs x, y ou utilisez la classe intégrée: ['Point'] (https://docs.oracle.com/javase/8/docs/api/java/awt/Point.html) – Andreas

Répondre

1

Je voudrais vous suggérer d'utiliser une structure de données différente ici. Vous pouvez créer un propre type de données (POJO) pour les coordonnées x/y, puis vous pouvez trier la liste de manière "normale" Java.

C'est le POJO ce que vous pouvez utiliser:

public class Coordinate { 
    public int x; 
    public int y; 

    public Coordinate(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    @Override 
    public String toString() { 
     return "[" + x + ", " + y + "] "; 
    } 
} 

Et le programme principal qui initialzes la liste, trie les coordinades en fonction de coordonnées X et montre le résultat:

public class SortDemo { 
    public static void main(String[] args) { 
     // init the list 
     List<Coordinate> coordinates = new ArrayList<>(); 
     coordinates.add(new Coordinate(9, 3)); 
     coordinates.add(new Coordinate(8, 6)); 
     coordinates.add(new Coordinate(6, 5)); 
     coordinates.add(new Coordinate(5, 7)); 
     coordinates.add(new Coordinate(4, 9)); 
     coordinates.add(new Coordinate(3, 1)); 
     coordinates.add(new Coordinate(2, 8)); 
     coordinates.add(new Coordinate(-10, 10)); 

     // sort 
     Collections.sort(coordinates, (coordinate1, coordinate2) -> coordinate1.x - coordinate2.x); 

     // display the content of the sorted list 
     System.out.println(coordinates); 
    } 
} 

Résultat :

[-10, 10] , [2, 8] , [3, 1] , [4, 9] , [5, 7] , [6, 5] , [8, 6] , [9, 3] 

EDIT

toString():

Renvoie une représentation de chaîne de l'objet. En général, la méthode toString renvoie une chaîne qui "représente textuellement" cet objet . Le résultat devrait être une représentation concise mais informative qui est facile pour une personne à lire. Il est recommandé que toutes les sous-classes remplacent cette méthode.

Par exemple:

Coordinate coordinate = new Coordinate(-10, 10); 
System.out.println(coordinate); 

OU

Coordinate coordinate = new Coordinate(-10, 10); 
System.out.println(coordinate.toString()); 

Vous pouvez le vérifier en mode DEBUG dans votre IDE.

Trier

La forme courte mentionnée de tri collection est équivalent à ceci:

class MySort implements Comparator<Student> { 
    public int compare(Coordinate coordinate1, Coordinate coordinate2) { 
     return coordinate1.x - coordinate2.x; 
    } 
} 

// how to use 
Collections.sort(coordinates, new MySort()); 

API doc of compare()

+0

Pourquoi les getters et les setters si vous pouvez les rendre publics à la place? Pas besoin de fausse encapsulation. – Aziuth

+0

Indead, nous n'avons pas besoin de getters/setters dans ce cas. Je vais les enlever. – zappee

+0

Merci d'avance! Juste question rapide sur quand utiliser la méthode "toString" et ne peut pas comprendre cette partie "Collections.sort (coordonne, (coordonnée1, coordonnée2) -> coordonnée1.x - coordonnée2.x);" ** Je sais que Collections.sort (nom de l'objet arraylist) fera le tri mais que faites-vous avec (coordinate1, coordinate2) -> coordinate1.x - coordinate2.x part? – erickimme