2016-07-01 13 views
2

i haben zwei Array.,Reihenfolge vom höchsten zum niedrigsten und Positionsänderungen von einem anderen Array Java

ist Integer-Array und ein anderer ist String-Array. Hier muss ich die Integer-Array-Werte sortieren, um vom höchsten zum niedrigsten Wert zu sortieren. Zu dieser Zeit muss ich auch die Position vom String-Array bewegen.

Für zB:

String Array: [Register & Leiter der Verwaltung, Web-Design, IT - Software Engineer, Buchhalter, Network Engineer] Int Array [4, 2, 2, 6, 2]

.

Aber ich brauche ein Ergebnis von oben,

String Array: [Accountant, registriert & Leiter Administration, IT - Software Engineer, Network Engineer, Web-Design] Int Array [6, 4, 2, 2, 2]

Sie müssen das Integer-Array sortieren und gleichzeitig die String-Array-Position ändern. Wenn dieselben Werte im Integer-Array vorkommen, müssen Sie die alphabetische Reihenfolge anordnen. Wie kann ich ?

jeder kürzeste Weg ist da?

+2

Die vernünftigste Weg, um diese 2 Arraylist in 1 Arraylist von Objekten verändert sich, wo Klasse haben 2 Felder: String-Name und int-Wert. Auch in dieser Klasse implementiert Intrafrace Comparable basierend auf Wert. Und dann wird es nur Collections.sort() –

Antwort

1

Ich hoffe, dies wird Ihnen helfen:

int[] intArray = new int[] { 4, 2, 2, 6, 2 }; 
String[] strArray = new String[] { "Register & Head of Administration", "Web Designing", "IT - Software Engineer", "Accountant", "Network Engineer" }; 
int tmp0 = 0; 
String tmp1 = ""; 
for (int i = 0; i < intArray.length; i++) { 

    for (int j = i + 1; j < intArray.length; j++) { 

     if (intArray[j] > intArray[i]) { 

      // swap in int-Array 
      tmp0 = intArray[i]; 
      intArray[i] = intArray[j]; 
      intArray[j] = tmp0; 

      // swap in string-Array 
      tmp1 = strArray[i]; 
      strArray[i] = strArray[j]; 
      strArray[j] = tmp1; 
     } else if (intArray[j] == intArray[i]) { 

      // sorts alphabetically 
      if (strArray[j].compareTo(strArray[i]) < 0) { 

       tmp1 = strArray[i]; 
       strArray[i] = strArray[j]; 
       strArray[j] = tmp1; 
      } 
     } 
    } 
} 

//output 
for (int k = 0; k < intArray.length; k++) { 

    System.out.println(strArray[k] + " " + intArray[k]); 
} 

Ausgang:

Accountant 6 Register & Head of Administration 4 IT - Software Engineer 2 NetworkEngineer 2 Web Designing 2

0

In Ihrem Fall Array geringe Größe bedeutet sortieren Verwendung Blase (Bubble-Art ist keine hohe Leistung für große Array) .Sort int Array basiert auf Position Sie String-Array tauschen auch wie diese

  int intArray[] = new int[]{4, 2, 2, 6, 2}; 
      String strArray[]=new String[]{Accountant, Register & Head of Administration, IT - Software Engineer, Network Engineer,Web Designing} 
      int n = intArray.length; 
      int temp = 0,temp1=0;    
      for(int i=0; i < n; i++){ 
        for(int j=1; j < (n-i); j++){        
          if(intArray[j-1] < intArray[j]){           
            temp = intArray[j-1]; 
            temp1=strArray[j-1]; 
            intArray[j-1] = intArray[j]; 
            strArray[j-1] = strArray[j]; 
            intArray[j] = temp; 
            strArray[j] = temp1; 
          }        
        } 
      } 
+0

wird es funktionieren, aber: 1.Sie wissen nicht die Anzahl der Elemente in Arrays, also Blase Sortierung könnte nicht die beste sein, 2. - warum schreiben so viel Code, wenn Dinge schöner gemacht werden können –

+0

In Ihrem Fall Array klein Größe bedeutet Bubble-Sortierung (Bubble-Sortierung ist keine hohe Leistung für große Array) – sasikumar

1
List<Pair<String, Integer>> data= new ArrayList<Pair<String, Integer>(); 
data.add(new Pair("Register & Head of Administration", 4)); 
... 
data.add(new Pair("Network Engineer", 2)); 

Collections.sort(data, new Comparator<Pair<String, Integer>>() { 
@Override 
public int compare(final Pair<String, Integer> o1, final Pair<String, Integer> o2) { 
    // TODO: implement your logic here, e.g. 
    return o1.second.compareTo(o2.second); 
} 
+0

Nicht sicher, wenn Sie entdeckt, aber es gibt doppelte Werte (so in Ihrem Fall doppelte Schlüssel, so wird nicht funktionieren) –

+0

Bitte sehen Sie das Update. – David

+0

Viel besser - das wird funktionieren –

0

versuchen Sie so etwas wie dieses

Diese Struktur Ihrer Daten würde

class DataModel{ 
    int priority; 
    String priorityName; 
    DataModel(int priority,String priorityName){ 
     this.priority = priority; 
     this.priorityName = priorityName; 
    } 
} 

Nun wird ein Arraylist dieser Klasse machen dataArrayList<DataModel>

eine Methode Verwenden Sie Ihre int-Array mit Prioritäten zu sortieren

for(int i=0; i < n; i++){ 
    for(int j=1; j < (n-i); j++){ 

      if(intArray[j-1] < intArray[j]){ 

      //add the data of your largest int number in your int Array and use its position to get the data of your String array. 
      dataArrayList.add(new DataModel(your_lagest_int, your_department)); 

     } 
    } 
} 

Sie sollten eine sortierte Arraylist mit allen Daten in es.

1

Warum nicht eine dritte Klasse verwenden, die alle Strings mit einem Gewicht gruppiert.

Erstellen Sie einen Komparator, um WeightString zu bestellen, und verwenden Sie die Stream-API, um Daten zu verwenden.

public class WeightString { 
    public String value; 
    public int weight; 

    public WeightString(String value, int weight) { 
     this.value = value; 
     this.weight = weight; 
    } 
} 

public Comparator<WeightString> mWeightStringComparator = 
     (o1, o2) -> Integer.compare(o1.weight, o2.weight); 


// in code 
WeightString[] weightStrings = new WeightString[]{ 
     new WeightString("a", 12), 
     new WeightString("b", 1), 
     new WeightString("c", 8), 
     new WeightString("d", 4) 
}; 

Stream<WeightString> stringStream = Arrays.stream(weightStrings); 
stringStream.sorted(mWeightStringComparator); 
WeightString[] orderedWeightStrings = (WeightString[]) stringStream.toArray(); 

//orderedWeightStrings : [b,d,c,a]