Portál AbcLinuxu, 25. prosince 2025 10:27
public class RevList<E extends Comparable<E>> implements ReversibleList<E> {
private E list[] = null;
private int size = 1;
private int current = 0;
…
@Override
public void add(E e) {
if (size == current) {
}
}
a potřebuji dvojnásobně zvětšit pole list (v té podmínce). Kdyby to byl např. normální int, tak nemám problém. Jak to mám ale udělat, když je tam to E?
(Potřebuji to do školní úlohy, kde je zadání takové, že máme implementovat vlastní metody komponenty ReversibleList, které jsme dostali jako rozhraní, a nesmíme přitom použít kolekce…)
Řešení dotazu:
ll.add()), tak mi bylo hned jasné, že to není dovoleno (čili - není LinkedList kolekce?).
Potřebuji to do školní úlohy, kde je zadání takové, že máme implementovat vlastní metody komponenty ReversibleList, které jsme dostali jako rozhraní, a nesmíme přitom použít kolekce…Ach jo. To by mne zajímalo, jaký je v tom výchovný záměr, naučit to někoho schválně dělat blbě. Jinak když použijete
java.util.Arrays.copyOf(), nemusíte myslím nic moc řešit. A až ten úkol dokončíte, tak na to celé hlavně rychle zapomeňte – pole a primitivní typy jsou v Javě především z historických důvodů, kdy to byl způsob optimalizace. Pokud k tomu nemáte nějaký pádný důvod (jako třeba hloupé zadání školní úlohy), používejte kolekce, ty jsou mnohem pružnější.
int list[] = new int[1]; int tmp[] = list.clone(); list = new int[2*list.length]atd
Jenomže když to pole list není int, ale E, tak nevím, jak udělat to list = new E[2*list.length] (toto je samozřejmně špatně…)
(E[]) new Object[list.length*2]
java.util.LinkedList
Nebo si vyhledejte na internetu "spojový seznam", určitě najdete spoustu popisů toho, jaké se používají struktury a jak jsou implementovány jednotlivé operace.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.