Jaki jest preferowany sposób kopiowania tablicy typu pierwotnego w Javie? A co z problemami z wydajnością?Java: Skopiuj tablicę typu niepochodzących prymitywów.
Odpowiedz
Stary sposób szkoła:
public static void java.lang.System.arraycopy(Object src, int srcPos,
Object dest, int destPos, int length)
Ten copys z jednej istniejącej macierzy do innego. Musisz samodzielnie przydzielić nową tablicę ... zakładając, że tworzysz tablicę z.
Od JDK 6 począwszy klasa java.util.Arrays
posiada szereg copyOf
metod wykonywania kopii tablic, z nowym rozmiarze. Te, które są istotne są:
public static <T> T[] copyOf(T[] original, int newLength)
i
public static <T,U> T[] copyOf(U[] original, int newLength,
Class<? extends T[]> newType)
Ten pierwszy tworzy kopię używając oryginalnego typ tablicy, a druga tworzy kopię z innym typem matrycy.
Należy zauważyć, że zarówno arraycopy, jak i 3 argumenty copyOf muszą sprawdzić typy każdego z elementów w pierwotnej (źródłowej) tablicy w stosunku do docelowego typu tablicy. Więc obaj mogą zgłaszać wyjątki typu. 2 argument copyOf (przynajmniej w teorii) nie wymaga żadnego sprawdzania typu, dlatego powinien być (teoretycznie) szybszy. W praktyce relatywna wydajność zależy od implementacji. Na przykład arraycopy
jest często traktowany przez JVM w specjalny sposób.
Dla każdego, kto zastanawia się 'int [] array = {1, 2, 3}; int [] copy = Arrays.copyOf (array, array.length, Integer.class); 'nie skompiluje się (_" Metoda copyOf (int [], int) w tablicach typów nie ma zastosowania dla argumentów (int [], int, Class
System.arraycopy
(co daje możliwość skopiowania dowolnych części tablicy poprzez parametry offset
i length
). Lub
java.util.Arrays.copyOf
który został dodany w JDK 6 i jest to metoda rodzajowa dzięki czemu może być stosowany:
Integer[] is = new Integer[] { 4, 6 }
Integer[] copy = Arrays.copyOf(is, is.length);
lub może ograniczyć typ:
Number[] is = new Number[]{4, 5};
Integer[] copy = Arrays.copyOf(is, is.length, Integer[].class);
pamiętać, że można również użyć clone
metodę na tablicy:
Number[] other = is.clone();
- 1. Korzystanie odbicie odzyskać tablicę prymitywów nieznanego typu
- 2. Skopiuj tablicę asocjacyjną w javascript?
- 3. Dlaczego wolimy prymitywów do pudełkowych prymitywów w Java
- 4. Java: przyłączyć tablicy prymitywów z separatorem
- 5. odlewania obiektu [] na tablicę typu referencyjnych Java
- 6. Skopiuj tablicę Bash z pustymi elementami
- 7. Przechowywanie pary prymitywów w Java HashMap
- 8. Najbardziej wydajna biblioteka zbiorów prymitywów Java
- 9. Czy tablica Java prymitywów jest przechowywana w stosie lub sterty?
- 10. Zmiana typu mongodb na tablicę
- 11. skopiuj tablicę 2D do 3 wymiaru, N razy (Python)
- 12. Auto Boks prymitywów
- 13. Zliczanie prymitywów w Neo4j
- 14. Czy kolejność iteracji Java foreach względem prymitywów jest dokładnie zdefiniowana?
- 15. java - słowo kluczowe volatile również dla nie-prymitywów
- 16. Wywołanie metody Java vararg od Scala z prymitywów
- 17. Jak zindeksować tablicę typu zagnieżdżonego w Elasticsearch?
- 18. Jak przekonwertować tablicę ciągów na tablicę enum w java
- 19. Mockito matcher i tablica prymitywów
- 20. Jak używać prymitywów w Scali?
- 21. Mijając tablicę do funkcji Java
- 22. jak sprawdzić pustą tablicę java
- 23. Łańcuch podzielony Java na tablicę
- 24. Pozwalanie funkcji java akceptować kolekcję lub tablicę
- 25. Scala - tworząc tablicę typu sparametryzowanego określonej długości
- 26. Jak przenieść ogólną tablicę do innego typu?
- 27. Numpy: Sprawdź tablicę dla typu danych ciągowych
- 28. Jak udokumentować tablicę z subarrayami (typu mieszanego)?
- 29. Typowe argumenty typu Java
- 30. skopiuj wykres (adjacency_list) do innego
Czy chcesz tylko skopiować samą tablicę (tj. Odniesienia w tablicy), czy też chcesz sklonować wszystkie obiekty, do których odnoszą się odniesienia w tablicy? – Jesper