2017-03-02 9 views
-3

Ich versuche, ein doppeltes Element in einem Array zu finden. Ich habe es bereits gelöst, indem ich das Array durchquerte. Aber jetzt möchte ich Array in Arraylist konvertieren und enthält das Schlüsselwort arraylist.Array in ArrayList ändern

Ich kann Array nicht in Arraylist konvertieren und das Schlüsselwort contains verwenden. Bitte im folgenden Code suchen:

public void findDuplicate2() { 
    int arr[] = { 1, 2, 3, 4, 5, 3, 7, 5 }; 
    ArrayList<int[]> arrlist = new ArrayList<>(Arrays.asList(arr)); 

    for (i = 0; i < len; i++) { 
     if (arrlist.contains(arr[i])) 
      System.out.println(arr[i]); 
     else 
      System.out.println("no duplicate" + arr[i]); 
    } 
} 
+0

Geben Sie Ihren Kompilierungsfehler ein. – khelwood

+0

wird 'len' zur Initialisierung verwendet um eine Instanzvariable zu blockieren? –

+0

Möchten Sie eine 'ArrayList '? Ich denke, Sie bevorzugen 'ArrayList '. –

Antwort

0

Hier ist Ihre Arrlist-Variable vom Typ Int []. Hier ist die Arrlist-Größe 1 (das gesamte Eingabearray als Einzeleintrag).

So können Sie in der Liste nur die Existenz eines Integer-Array überprüfen, indem Sie enthält Methode von arrlist. if (arrlist.contains (arr)) // true in Ihrem Fall gibt

+0

if (arrlist.contains (arr)) gibt immer true zurück. Wie kann ich eine Arraylist (Integer-Typ) mit demselben Element, die in Array vorhanden sind, erstellen? –

0

Ein einfacherer Weg dublicates zu finden, ist diese:

public void findDuplicate2(){ 
    int arr[] = {1,2,3,4,5,3,7,5}; 

    for (int i = 0; i < arr.length; i++) { 
     boolean dublicate = false; 
     for (int j = 0; j < arr.length; j++) { 
      if(arr[i] == arr[j] && i != j){ 
       System.out.println(arr[i]); 
       dublicate = true; 
       break; 
      } 
     } 
     if(!dublicate) 
      System.out.println("No dublicate " + arr[i]); 
    } 
} 

In Ihrem Code der Arraylist enthält ein Element, das Array arr. Sie können dies mit

System.out.println(arrlist.get(0)); 
System.out.println(arrlist.get(1)); 

dem richtigen Weg, um jedes Element von arr zu übertragen wären ... Arraylist

+0

Das habe ich schon gemacht. Ich wollte Arraylist verwenden. Danke :) –

1

Es gibt eine Reihe von Problemen mit Ihrem Code:

  • Sie sind Erstellen einer ArrayList<int[]>, dh eine Array-Liste von Arrays von int. Diese Liste enthält ein Array, nämlich das, von dem Sie ausgegangen sind. Ich glaube nicht, dass du das beabsichtigt hast. Meine Vermutung ist, Sie wollten eine ArrayList<Integer>, die die Nummern aus dem Array enthält. Khelwoods Link sollte Ihnen helfen.
  • Sie haben i noch len nicht deklariert. Ich schlage vor, Sie verwenden for (int i = 0; i < arr.length; i++).
  • arrlist.contains(arr[i]) immer wieder false da eine Liste von Arrays können eine Reihe nicht enthalten (die Zahlen innerhalb des Arrays werden nicht durchsucht). Es ist ein Designproblem mit ArrayList, dass Sie fragen können, ob es ein Element des falschen Typs enthält (es gibt historische Gründe dafür). Wenn Sie die Arraylist zu ArrayList<Integer> ändern, wie ich oben vorgeschlagen habe, wird es jedoch funktionieren.
  • Sobald Sie die oben genannten zu arbeiten, wird arrlist.contains(arr[i]) immer true zurückgeben, da jede Zahl aus dem Array in der Array-Liste sein wird, auch diejenigen, die nicht doppelt sind.
+0

Danke, 1. Ja, ich wollte Arraylist der Ganzzahl erstellen, die dasselbe Element wie in Array haben wird. 2. Ich änderte das Element auch in Integer, aber ich erhalte einen Fehler bei der Kompilierung (Typkonflikt: Konvertieren von ArrayList in ArrayList nicht möglich) 3. len ist Länge des Arrays, das ich deklariert habe, wo das Array deklariert wurde. Beim Posten habe ich vergessen, das zu kopieren. Brauchen Sie Hilfe mit der obigen Kompilierzeit Fehler –

+0

'Arrays.asList() 'funktioniert nicht mit einem Array von Primitiven (wie' int's). Dies ist der Grund für den Fehler bei der Kompilierung. Um Ihre Array von 'int' zu' 'Arraylist konvertieren können Sie entweder sehen [Wie int [\] in Liste in Java konvertieren?] (Http://stackoverflow.com/questions/1073919/how-to-convert -int-in-listinteger-in-Java) (wie bereits erwähnt) oder verwenden Sie 'Arraylist arrlist = new Arraylist <> (Arrays.stream (arr) .boxed() sammeln (Collectors.toList())). '(erfordert Java 8). –

+1

Das hat mein Problem gelöst. –