Portál AbcLinuxu, 14. července 2025 04: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
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.