2016-11-27 1 views
-1

Ich bekomme immer einen Fehler "Sammlungen ist privat". Ich wollte ein ArrayList erstellen. Wie erweitern Sie die Klasse Collections richtig?Sammlungen sind privat

import java.util.Collections; 

public class lists extends Collections { 

    public static void main(String[] args) { 
     Arraylist <Integer> x = new Arraylist<>(); 
     int[] y = new int[100]; 
     for(int i = 0; i<100-1; i++) { 
      y[i] = i; 
     } 
     for(int j = 0; j<100-1; j++) { 
      Integer z = new Integer(y[j]); 
      x.set(j , z); 
      System.out.println(x.get(j)); 
     } 
    } 
} 
+0

Wenn Sie eine Klasse verwenden möchten, müssen Sie diese Klasse importieren . Nicht eine andere Klasse. – SLaks

+1

Es gibt * keinen Grund *, das Schlüsselwort 'extends' trotzdem zu verwenden. Sie instanziieren nicht einmal eine Instanz von 'Listen'! – Makoto

Antwort

1

Von der Quelle der Collections Klasse. Die Collections-Klasse ist nicht instanziierbar, da sie einen privaten Konstruktor hat. Wenn Sie über eine Subclass verfügen, die die Collections-Klasse aufruft, ruft die Subklasse den Superklassenkonstruktor auf, da die Superklasse keinen anderen Konstruktor zum Aufrufen definiert. Sie können die Superklasse Collections und deren Unterklassen nicht instanziieren.

// Suppresses default constructor, ensuring non-instantiability. 
    private Collections() { 
    } 

Aus Ihrer Frage, wenn Sie wollen einfach nur eine ArrayList Klasse instanziiert. Die Zeile ArrayList <Integer> x = new ArrayList<>(); reicht bei einem Import von java.util.ArrayList aus.

Überprüfen Sie Ihren Code und fügen Sie Variablen hinzu, wo erforderlich, und Sie können die Logik weiter verbessern.

final int RANGEVAL = 100; 
    for(int i = 0; i < RANGEVAL -1 ; i++) { 
     x.set(i , i); //You can also use x.add(i); 
     System.out.println(x.get(i)); 
    } 
1

Zunächst einmal, wenn alles, was Sie tun wollen eine Instanz erstellen von ArrayList, gibt es keinen Grund, etwas zu verlängern. In Ihrem Beispielcode ist dies nicht nötig. Wenn Sie wirklich Ihre eigene Sammlung Klasse wollen, dann Collections ist die falsche Klasse. Sie müssen Collection<E>, singular oder List<E> implementieren.

Die Implementierung dieser Schnittstellen ist eine Menge Arbeit. Sie können viel Zeit sparen, indem Sie AbstractList<E> unterteilen. Wenn Sie das tun, müssen Sie nur get(int) und size() implementieren; Der Rest ist für dich erledigt. Wenn die Liste änderbar ist, sollten Sie auch set(int, E), add(int, E) und remove(int) außer Kraft setzen.

2

Vielleicht, wenn Sie nur versuchen, ArrayList zu verwenden, dann müssen Sie das nicht erweitern.

  1. Es ist ArrayList (nicht Arraylist)
  2. Verwenden y.length auf Ihrer ersten Schleife statt 100-1.
  3. Sie können einfach x.add() verwenden, um Ihren ganzzahligen Wert hinzuzufügen, ohne den Index zu setzen, der hinzugefügt werden sollte, da Sie dort streng ein Muster angeben.

Versuchen Sie, diese Lösung:

import java.util.ArrayList; 

public static void main (String[] args) throws java.lang.Exception 
{ 
    ArrayList <Integer> x = new ArrayList<Integer>(); 
    int[] y = new int[100]; 
    for(int i = 0; i<y.length; i++){ 
     y[i] = i; 
    } 
    for(int j = 0; j<100-1; j++){ 
     x.add(new Integer(y[j])); 
     System.out.println(x.get(j)); 
    } 
} 

Aber hier ist eine bessere Lösung, die gleiche Leistung mit einer Schleife:

public static void main (String[] args) throws java.lang.Exception 
{ 
    ArrayList <Integer> x = new ArrayList<>(); 
    for(int j = 0; j<100-1; j++){ 
     x.add(new Integer(j)); 
     System.out.println(x.get(j)); 
    } 
}