|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectjava.util.AbstractCollection<E>
java.util.AbstractList<T>
net.ranides.assira.collection.list.NativeArrayList<T>
T - public class NativeArrayList<T>
Lista odwzorowująca tablicę elementów typu prostego (int, float, etc) dokonując jedynie po drodze koniecznego autoboxingu.
Utworzona lista posiada maksymalną pojemność wyliczoną na podstawie długości
prezentowanej tablicy (patrz: capacity). Rozmiar listy nie ma
bezpośredniego związku z długością tablicy i może mieć dowolną wartość z zakresu
[0;capacity]. Rozmiar listy może być modyfikowany: wszystkie operacje usuwania
i wstawiania są obsługiwane tak długo, jak długo nie zostanie przekroczony
dozwolony zakres.
Standardowe kolekcje nie mogą przechowywać typów prostych, co oznacza, że np
ArrayList nie przechowuje elementów typu int ale obiekty typu Integer.
Powoduje to duży narzut pamięciowy, który może być nieakceptowalny dla bardzo
dużych list. Dodatkowo niemożliwa jest wydajna współpraca metod oczekujących
List<Integer> oraz tablic int[]. W celu wymiany danych konieczna
jest nowa alokacja pamięci i skopiowanie wszystkich danych do nowego formatu
(rzutowanie Integer[] <-> int[] jest niemożliwe).
JIT/HotSpot powinien sobie bez trudu poradzić z eliminacją operacji
box'ujących - zwłaszcza biorąc pod uwagę wewnętrzną implementację
NativeArrayList. Jest niemal pewne, że tradycyjnych pętli
kopiujących optymalizator nie może usunąć wcale.
|
ArrayUtils.wrap(Object),
ArrayUtils.wrap(Class, Object)| Constructor Summary | |
|---|---|
NativeArrayList(Class<?> clazz,
Object array)
Tworzy nową listę odwierciedlającą tablicę. |
|
NativeArrayList(Class<?> clazz,
Object array,
int size)
Tworzy nową listę odwierciedlającą tablicę. |
|
NativeArrayList(Object array)
Tworzy nową listę odwierciedlającą tablicę. |
|
NativeArrayList(Object array,
int size)
Tworzy nową listę odwierciedlającą tablicę. |
|
| Method Summary | |
|---|---|
void |
add(int index,
T value)
|
int |
capacity()
Zwraca maksymalny dopuszczalny rozmiar listy. |
Class<?> |
component()
|
Object |
delegator()
|
T |
get(int index)
|
T |
remove(int index)
|
T |
set(int index,
T element)
|
int |
size()
|
| Methods inherited from class java.util.AbstractList |
|---|
add, addAll, clear, equals, hashCode, indexOf, iterator, lastIndexOf, listIterator, listIterator, subList |
| Methods inherited from class java.util.AbstractCollection |
|---|
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray, toString |
| Methods inherited from class java.lang.Object |
|---|
getClass, notify, notifyAll, wait, wait, wait |
| Methods inherited from interface java.util.List |
|---|
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray |
| Constructor Detail |
|---|
public NativeArrayList(Object array)
array - ArrayUtils.wrap(Object)
public NativeArrayList(Object array,
int size)
array - size - początkowy rozmiar zwracany przez listę
public NativeArrayList(Class<?> clazz,
Object array)
Podana tablica jest "transparentnie" konwertowana na wskazany typ, a dopiero
wynik konwersji jest używany przez kolekcję. Przykładowo traktowanie
tablicy long[] jako tablicy byte[] umożliwia utworzenie
listy typu List<Byte>. Konwersja jest wykonywana natywnie przez system hostujący (a nie przez VM!). Przekłada się to przede wszystkim na względnie większą wydajność kosztem nieprzenośności kodu ze względu na endianess.
Uwaga! Rzutowanie między typami o różnych rozmiarach powoduje, że lista ma
capacity różne niż array.length
clazz - array - ArrayUtils.wrap(Class, Object)
public NativeArrayList(Class<?> clazz,
Object array,
int size)
Podana tablica jest "transparentnie" konwertowana na wskazany typ, a dopiero
wynik konwersji jest używany przez kolekcję. Przykładowo traktowanie
tablicy long[] jako tablicy byte[] umożliwia utworzenie
listy typu List<Byte>. Konwersja jest wykonywana natywnie przez system hostujący (a nie przez VM!). Przekłada się to przede wszystkim na względnie większą wydajność kosztem nieprzenośności kodu ze względu na endianess.
Uwaga! Rzutowanie między typami o różnych rozmiarach powoduje, że lista ma
capacity różne niż array.length
clazz - array - size - początkowy rozmiar zwracany przez listę| Method Detail |
|---|
public int capacity()
public int size()
size in interface Collection<T>size in interface List<T>size in class AbstractCollection<T>public T get(int index)
get in interface List<T>get in class AbstractList<T>
public T set(int index,
T element)
set in interface List<T>set in class AbstractList<T>
public void add(int index,
T value)
add in interface List<T>add in class AbstractList<T>public T remove(int index)
remove in interface List<T>remove in class AbstractList<T>public Class<?> component()
public Object delegator()
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||