Как создать массив вектора в 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
, вы будете все готово!