Как создать массив вектора в Java?

Итак, я хочу массив вектора целого числа в Java.

Если я ставлю

Vector<Integer>[] matrix;
matrix = new Vector<Integer>[100];

Я не могу получить ошибку компиляции

не удается создать общий массив вектора

должен ли я использовать

    matrix = new Vector[100];

вместо? (что дает предупреждение)

или я просто не должен использовать массив векторов и использовать вектор вектора вместо этого?

примечание: Я не хочу вектор , я хочу Vector[] для создания матрицы целых чисел без использования Integer[][].

5 ответов


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

@SuppressWarnings("unchecked")
Vector<Integer>[] anArray = (Vector<Integer>[]) new Vector<Integer>[100];

вы можете обойти эту проблему, если вы полностью избежать массивов. Т. е.:

Vector<Vector<Integer>> list = new Vector<Vector<Integer>>(100);

или с типами коллекций:

List<List<Integer>> list = new ArrayList<List<Integer>>(100);

Vector<Integer> vector = new Vector<Integer>();

Если вы пытаетесь сделать что-то вроде этого:

Vector<Integer> vector = new Vector<Integer>();
Vector<Integer>[] vectors = {vector};

вы получите ошибку компиляции:

не удается создать общий массив Вектор

однако, если вы не укажете общий тип, java позволит это, но с предупреждением:

Vector<Integer> vector = new Vector<Integer>();
Vector[] vectors = {vector};

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

// preallocated vector, which can hold 100 elements
Vector<Integer> integers = new Vector(100);

.

// default vector, which will probably grow a couple of times when adding 100 element
Vector<Integer> integers = new Vector();

истинный массив Java не может расти или сжиматься, и он не поддерживает удаление элемента из средней точки. Чтобы выделить массив, вы используете

// allocate an array
Integer[] integers = new Integer[100];

теперь, если вы хотите иметь "массив векторов", то вы бы

// array of vectors
Vector[] vectors = new Vector[100];

чтобы создать массив универсального, вы должны создать не-универсальный и привести его. Вы также должны инициализировать все элементы в массиве, иначе они будут иметь значение null. :(

Vector<Integer>[] anArray = (Vector<Integer>[]) new Vector[100];
for(int i = 0; i < anArray.length; i++)
   anArray[i] = new Vector<Integer>();

однако, поскольку Vector является устаревшим классом, который был заменен ArrayList в Java 1.2 (1998), я бы использовал List для интерфейса и ArrayList для реализации.

List<Integer>[] anArray = (List<Integer>[]) new List[100];
for(int i = 0; i < anArray.length; i++)
   anArray[i] = new ArrayList<Integer>();

другой вариант - использовать коллекцию, которая содержит примитив int вместо Integer Объекты. Это может повысить производительность, если это необходимо.

TIntArrayList[] anArray = new TIntArrayList[100];
for(int i = 0; i < anArray.length; i++)
   anArray[i] = new TIntArrayList();

чтобы избежать литья типа, рассмотрим эту реализацию:

    Vector<Integer>[] intVectorArray;
    Vector[] temp = new Vector[desiredSize];
    intVectorArray = temp;
    for(int i = 0;i<intVectorArray.length;i++){
        hashArray[i] = new Vector<Integer>();
    }

созданный intVectorArray наследует общий тип векторного массива temp чтобы дать вам желаемые размеры и for loop создаст экземпляр нужного типа данных.

когда вы будете готовы позвонить Integer функции на элементах intVectorArray, вы будете все готово!