2010-03-04 21 views
20

Mój kod wygląda następująco:Jak dodać wszystkie elementy tablicy String do wektora w Javie?

Vector<String> My_Vector=new Vector<String>(); 
String My_Array[]=new String[100]; 

for (int i=0;i<100;i++) My_Array[i]="Item_"+i; 
...... 
My_Vector.addAll(My_Array); 

Ale mam komunikat o błędzie, jaki jest właściwy sposób to zrobić, bez pętli, aby dodać każdą pozycję?

Frank

+0

Dlaczego używasz Vector? Wolałbym ArrayList, ponieważ domyślnie nie jest zsynchronizowany. – duffymo

+2

Nie używaj Vector, jest to starsza klasa, użyj zamiast tego ArrayList. I po prostu użyj 'My_Vector.add (" Item _ "+ i);' zamiast użyć pośredniej tablicy –

+0

Wow. Nie widziałem, by wektor wyrwał się w co najmniej 5 lat. :) Przywraca mnie do JDK 1.1. Prawdopodobnie chcesz iść z Collections.synchronizedList (new ArrayList()). – sidereal

Odpowiedz

17

Funkcja vector.addAll() pobiera parametr Collection in. Aby przekonwertować tablicę na kolekcję, można użyć opcji Arrays.asList():

My_Vector.addAll(Arrays.asList(My_Array)); 
+1

Odpowiedź Chris Jester-Young (obecnie najlepiej oddany) zapewnia lepszą alternatywę. – espinchi

6
My_Vector.addAll(Arrays.asList(My_Array)); 

Jeśli zauważysz, Collection.addAll zajmuje Collection argument. Tablica Javy nie jest Collection, ale Arrays.asList, w połączeniu z Collection.toArray, jest "pomostem między interfejsami opartymi na tablicach i bazującymi na kolekcjach".

Alternatywnie, w konkretnym celu dodawania elementów z tablicy do Collection, można również użyć statycznej metody pomocniczej addAll z klasy Collections.

Collections.addAll(My_Vector, My_Array); 
55
Collections.addAll(myVector, myArray); 

Jest to korzystny sposób dodawania zawartość tablicy na zbiór (na przykład wektora).

https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#addAll-java.util.Collection-T...-

Dodaje wszystkich podanych elementów do określonej kolekcji. Elementy, które należy dodać, mogą być określone pojedynczo lub jako tablica. Zachowanie tego wygodnego sposobu jest takie samo jak w przypadku c.addAll (Arrays.asList (elementy)), ale ta metoda prawdopodobnie będzie działać znacznie szybciej w większości implementacji.

+1

+1 dla poprawiając moją literówkę i zapewniając tę ​​"znacznie szybszą" alternatywę. – polygenelubricants

+0

Implementacja tej metody zostanie zapętlona: 'for (element T: elements)'. – Pindatjuh

+2

Naprawdę masz rację, ale nie powiedziałeś, dlaczego jest on preferowany. Javadoc mówi: zachowanie tej metody wygody jest takie samo jak c.addAll (Arrays.asList (elementy)), ale ta metoda może działać znacznie szybciej w większości implementacji. –

Powiązane problemy