Mam następujący kod:
String[] where;
where.append(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.append(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");
Te dwa załączniki się nie kompilują. Jak to działałoby poprawnie?
Rozmiar tablicy nie może być modyfikowany. Jeśli chcesz mieć większą tablicę, musisz utworzyć nową.
Lepszym rozwiązaniem byłoby użycie takiego, ArrayList
który może rosnąć w miarę potrzeb. Ta metoda ArrayList.toArray( T[] a )
zwraca tablicę, jeśli jest potrzebna w tej formie.
List<String> where = new ArrayList<String>();
where.add( ContactsContract.Contacts.HAS_PHONE_NUMBER+"=1" );
where.add( ContactsContract.Contacts.IN_VISIBLE_GROUP+"=1" );
Jeśli chcesz przekonwertować go na prostą tablicę ...
String[] simpleArray = new String[ where.size() ];
where.toArray( simpleArray );
Ale większość rzeczy, które robisz z tablicą, możesz także zrobić za pomocą tej ArrayList:
// iterate over the array
for( String oneItem : where ) {
...
}
// get specific items
where.get( 1 );
Użyj a
List<String>
, npArrayList<String>
. Jest dynamicznie rozwijalny, w przeciwieństwie do tablic (patrz: Efektywna Java 2. edycja, pozycja 25: Preferuj listy od tablic ).Jeśli nalegasz na użycie tablic, możesz użyć
java.util.Arrays.copyOf
do przydzielenia większej tablicy, aby pomieścić dodatkowy element. To jednak nie jest najlepsze rozwiązanie.To jest
O(N)
naappend
.ArrayList
, z drugiej strony,O(1)
zamortyzował koszt na operację.Zobacz też
źródło
ArrayList
robi wewnętrznie.Apache Commons Lang ma
zwraca nową tablicę, ale jeśli z jakiegoś powodu naprawdę pracujesz z tablicami, może to być idealny sposób na zrobienie tego.
źródło
Jest jeszcze jedna opcja, której nie widziałem tutaj i która nie obejmuje „złożonych” obiektów lub kolekcji.
źródło
Nie ma metody
append()
na tablice. Zamiast tego, jak już sugerowano, obiekt List może obsłużyć potrzebę dynamicznego wstawiania elementów, np.Lub jeśli naprawdę chcesz użyć tablicy:
ale wtedy jest to stały rozmiar i nie można dodawać żadnych elementów.
źródło
Jak powiedziano tangens, rozmiar tablicy jest stały. Ale najpierw musisz go utworzyć, w przeciwnym razie będzie to tylko odwołanie zerowe.
Ta tablica może zawierać tylko 10 elementów. Możesz więc dodać wartość tylko 10 razy. W swoim kodzie masz dostęp do pustego odwołania. Dlatego to nie działa. Aby mieć dynamicznie rosnącą kolekcję, użyj ArrayList.
źródło
źródło
Zrobiłem ten kod! To działa jak urok!
Mam nadzieję, że to lubisz!!
źródło
Musisz użyć listy kolekcji. Nie można ponownie zwymiarować tablicy.
źródło
Jeśli chcesz przechowywać swoje dane w prostej tablicy, takiej jak ta
i chcesz dodać do niego niektóre elementy, takie jak liczby, prosimy o StringBuilder, który jest znacznie bardziej wydajny niż łączenie łańcucha.
Jest to znacznie lepsza metoda budowania łańcucha i przechowywania go w tablicy „gdzie”.
źródło
Dodanie nowych elementów do tablicy String.
źródło
<code>
tagu i to miało problemy z typami rodzajowymi. Staraj się unikać tego znacznika, ponieważ ... ma on problemy i wcinasz swój kod za pomocą 4 białych spacji, aby uzyskać odpowiednie formatowanie. Zrobiłem to dla twojego pytania :).Istnieje wiele sposobów dodawania elementu do tablicy. Możesz użyć temp
List
do zarządzania elementem, a następnie przekonwertować go z powrotemArray
lub możesz użyćjava.util.Arrays.copyOf
i połączyć go z ogólnymi, aby uzyskać lepsze wyniki.Ten przykład pokazuje, jak:
Aby użyć tej metody, wystarczy wywołać ją w następujący sposób:
Jeśli chcesz scalić dwie tablice, możesz zmodyfikować poprzednią metodę w następujący sposób:
Teraz możesz wywołać metodę w ten sposób:
Jak wspomniałem, możesz także używać
List
przedmiotów. Jednak będzie to wymagało niewielkiego włamania, aby zapewnić bezpieczne:Teraz możesz wywołać metodę w ten sposób:
źródło
newArray[elements.length] = element;
miałeś na myślinewArray[elements.length - 1] = element;
?Nie mam doświadczenia w Javie, ale zawsze mówiono mi, że tablice są strukturami statycznymi o z góry określonym rozmiarze. Musisz użyć ArrayList lub Vector lub innej dynamicznej struktury.
źródło
możesz utworzyć listę arraylist i użyć
Collection.addAll()
do przekonwertowania tablicy ciągów na listę arraylistźródło
Możesz po prostu to zrobić:
źródło
Jeśli naprawdę chcesz zmienić rozmiar tablicy, możesz zrobić coś takiego:
źródło
Rozmiar tablicy nie może być modyfikowany. Jeśli musisz użyć tablicy, możesz użyć:
źródło
Możliwe jest również wstępne przydzielenie wystarczającej ilości pamięci. Oto prosta implementacja stosu: program ma wypisywać 3 i 5.
źródło