2016-11-27 3 views
-1

Я продолжаю получать «коллекцию частной». Я хотел создать ArrayList. Как правильно расширить класс Collections?Коллекции являются частными

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

Если вы хотите использовать класс, вам необходимо импортировать этот класс , Не совсем другой класс. – SLaks

+1

Нет причин для использования этого ключевого слова 'extends'. Вы даже не создаете экземпляр «списков»! – Makoto

ответ

1

От источника Collections класс. Класс Collections не является экземпляром, поскольку имеет частный конструктор. Если у вас есть подкласс, который вызывает класс Collections, подкласс будет вызывать конструктор суперкласса, поскольку суперкласс не определяет какой-либо другой конструктор для вызова. Вы не можете создать экземпляр суперкласса Collections и его подклассов.

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

Из Вашего вопроса, если вы хотите просто создать экземпляр класса ArrayList. Линии ArrayList <Integer> x = new ArrayList<>(); будет достаточно для импорта java.util.ArrayList.

Проверьте свой код и добавьте переменные там, где это необходимо, и вы сможете улучшить логику.

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

Во-первых, если все, что вам нужно сделать, это создать экземпляр из ArrayList, нет никаких причин, чтобы продлить ничего. В вашем примере кода нет необходимости.

Если вам действительно нужна ваша собственная коллекция класс, то Collections - это неправильный класс. Вам необходимо реализовать Collection<E>, особый или List<E>.

Реализация этих интерфейсов - это большая работа. Вы можете сэкономить много времени, разделив AbstractList<E>. Когда вы это делаете, вам нужно только выполнить get(int) и size(); остальное сделано для вас. Если список изменчив, вы также захотите переопределить set(int, E), add(int, E) и remove(int).

2

Возможно, если вы только пытаетесь использовать ArrayList, тогда вам не нужно его расширять.

  1. Это ArrayList (не Arraylist)
  2. Используйте y.length на ваш первый цикл, а не 100-1.
  3. Вы можете просто использовать x.add(), чтобы добавить свое целочисленное значение без индекса индекса, который нужно добавить, поскольку там вы строго указываете шаблон.

Попробуйте это решение:

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)); 
    } 
} 

Но, вот лучшее решение, это же достижение с одной петлей:

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)); 
    } 
}