Синтаксис векторной декларации - PullRequest
0 голосов
/ 23 сентября 2018

Я новичок в Java и застрял с этим синтаксическим различием между объявлением Vector.

Vector<Object> v = new Vector<>(SIZE);

и этим

Vector v = new Vector(SIZE, GROWABLESIZE);

Я знаю, что оба они создадутНовый вектор типа объекта (может быть преобразован в другие типы) и может хранить до размера РАЗМЕР объектов, но как они отличаются внутренне / функционально?

Первый я узнал, работая с JTable для проекта колледжа, а затемсинтаксис преподавался в лекциях (и в книгах).Я не могу провести различие между ними.

1 Ответ

0 голосов
/ 23 сентября 2018

Различие в поведении во время выполнения состоит в том, что второе задает значение для capacityIncrement:

CapacityIncrement : величина, на которую увеличивается емкость при переполнении вектора

Разница во время компиляции заключается в том, что второй использует необработанный тип.Это означает, что компилятор выдаст предупреждение об этом.
Даже если вы хотите поместить / получить Object в этом векторе (что в целом является плохой практикой), объявление универсального типа, Vector<Object>, является более понятным ипоказать свое намерение.

Так вот:

Vector<Object> v = new Vector<>(SIZE);

или что:

Vector<Object> v = new Vector<>(SIZE, GROWABLESIZE);

лучше.

Но обычно вы не хотите использовать Vector, который является потокобезопасным унаследованным классом, который по-прежнему присутствует в основном из соображений ретро-совместимости.
Статический метод Collections.synchronizedList() обычно лучше / болеегибкий способ сделать поток экземпляра List безопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...