#5 NotBeginner
tvoje riesenie je totalne off topic ...
ak dana trieda ma sluzit rovnako ako arraylist tak nema zmysel aby sama obsahovala arraylist ...
class SpojovySeznam extends ArrayList<Object> {
private void vloz(Object o) {
super.add(o);
}
private void vypisSeznam() {
...
}
...
@Override
public neviem add(Object o) {
super.add();
alebo prepisat funkcionalitu ako chces
}
}
kazdopadne taketo riesenie nema zmysel pre dane zadanie (nic sa nim nenauci - resp sa nenauci to co bolo cielom)
ak by pouzil namiesto arraylist bezny array tak by to uplne menilo situaciu (musel by prepojovat viac poli) ... taketo riesenie by uz malo zmysel ale bolo by zbytocne (znizilo by narocnost pri hladani ale pre dane zadanie nepodstatne a stazovalo by to nazornost ... mozno vhodne ako bonusove zadanie) zlozite
ak ma dana uloha aspon nieco naucit (okrem zoznamenia sa s collections) tak by sa mala implementovat od zakladov ... tieto su jednoduchsie ako sa zda
public class List { //chapat ako list zo stromu (binarneho a pod) ... tiez mozne nazvat node a podobne
private Object main = null; //samotny objekt ktory bolo v plane ulozit (pri rozsireni by sa pouzilo pole ale museli by sa tiez upravit getter metody) ... pozor na to ze do Object sa neda ulozit int, double, char a pod ... musis pouzit ich wraper objekty teda Integer, Double, Character ... (toto ale zatial nemusis riesit pretoze java to vie medzi nimi automaticky konvertovat)
private List next = null;
private List previous = null;
List(Object o) {
this.main = o;
}
boolean hasNext() {
boolean result = false;
if (this.next != null) {
result = true;
}
return result;
}
List getLast() {
List last = this;
while (this.hasNext()) {
last = this.getNext();
}
return last;
}
void add(List list) {
List actualLast = this.getLast();
actualLast.next = list; //najde posledneho a do jeho polozky next ulozi odkaz na list ktory mal byt posledny
//nutne tiez pridat do posledneho listu odkaz na predchadzajuci
}
//praktickejsie ale asi bude namiesto prijmu priamo listu pouzit Object a ten zabalit do novo vytvoreneho listu
void add(Object object) {
List actualLast = this.getLast();
actualLast.next = new List(object);
}
public static void main(String[] args) {
List zoznam = new List(new Object());
zoznam.add(new Object());
}
}
zakladnu predstavu snad dostanes z tohto ... pre definiciu spojovy zoznam nepotrebujes pridavat odkaz na predchadzajuci objekt (to by bol potom obojstranne spojovy zoznam) ale odporucam ti skusit si to ... pracu s objektmi si ovela lepsie uvedomis ked budes pisat remove pre obojstranny zoznam (a tiez sa ti hodi ked budes robit sort-y)
tym interface som myslel to ze by si vytvoril inu triedu(napr Tree/Zoznam/List) ktorej ulohou bude umoznit vytvorenie zoznamu pred samotnym vkladanim objektov a zrychlenie napr sposobom ze bude mat ulozeny nejaky cache na najcastejsie volane objekty a pod (tiez pre jednoduche triedenie) ... tymto by si sa dostal na uroven ArrayList / LinkedDeque a podobnych ... keby si nad tym definoval este skutocny interface tak by si sa dostal na uroven ako je v Jave - takyto interface je napr Collection - definuje zakladne metody ktore kazdy zo zoznamov musi obsahovat (menovite) to ti umozni ze ked nebudes potrebovat nejake specialne funkcie (perma usporiadanie a pod) tak si definujes metodu napr takto
public boolean isContained(Collection col) { //tu ti bude pisat varovanie ze mas definovat akej generickej triedy musi byt kolekcia - bude obsahovat len objekty daneho typu napr Collection<String> col
boolean result = false;
for (String string: col) {
if (this.equals(string)){
result = true;
}
}
return result;
}
a do takejto metody mozes posielat vsetky objekty ktore su pod collection (najdes v linku ako All Known Implementing Classes)
pripadne sa mozes este zahrat a skusit si tvoju verziu zoznamu implementovat pod collection (Zoznam implements Collection) a uvidis ako funguje dedicnost (jej uloha je vysvetlena vyssie)