2016-04-25 7 views
0

Ich versuche, meine eigene Sammlung Klasse in Java zu tun.Richtiger Weg, um meine eigene Sammlung in Java zu machen

Ich muss Daten durch einen Schlüssel finden und in der Lage sein, darauf zu iterieren und ein Element durch seinen Index zu erhalten, also entscheide ich mich, eine Verkapselung der Hashtabelle und der Arraylist zu machen.

Dies ist mein Code:

public class GeoCollection <T extends Geographic> implements Iterable<T>, Iterator<T>{ 

private Hashtable<String,T> data_table; 
private ArrayList<T> data; 
private int cursor = 0; 

public GeoCollection(){ 
    data = new ArrayList<>(); 
    data_table = new Hashtable<>(); 
} 

public void add(String key,T data){ 
    this.data.add(data); 
    data_table.put(key,data); 
} 

public T get(int index){ 
    if(index >= data.size()) 
     throw new IndexOutOfBoundsException(); 
    return data.get(index); 
} 

public T get(String v){ 
    return data_table.get(v); 
} 

public T next() { 
    if(cursor == data.size()) 
     throw new NoSuchElementException(); 
    cursor++; 
    return data.get(cursor-1); 
} 

public T first(){ 
    cursor = 0; 
    return data.get(cursor); 
} 
public boolean hasNext(){ 
    return cursor < data.size(); 
} 

public boolean remove(Person p) { 
    return data.remove(p); 
} 

//se implemeta el iterator 
@Override 
public Iterator<T> iterator() { 
    cursor = 0; 
    return this; 
} 

}

Es gibt keine Notwendigkeit Liste Schnittstelle oder etwas ähnliches zu implementieren? Weil ich nicht weiß, ob man die Hashtabelle und die Arrayliste einkapselt und die grundlegenden Operationen implementiert, um diese Klasse "Sammlung" aufzurufen.

Ich bin sehr dankbar für jede Beratung oder Korrektur dieses Codes.

Danke.

+0

Warum nicht die 'Collection' Schnittstelle implementieren? – Logan

+3

Dies ist wahrscheinlicher am Thema bei [Code-Review] (http://codereview.stackexchange.com). – Radiodef

+0

Sie können 'List' nicht implementieren (zumindest nicht die Teile zum Hinzufügen), da Listeneinträge keine Schlüssel haben. Sie möchten wahrscheinlich 'Map' implementieren. – Thilo

Antwort

1

Ich denke, der beste Weg, dies zu tun ist, Implementierung Sammlung

implements java.util.Collection<E> 

auf diese Weise Sie jede Methode in der Sammlung Schnittstelle bt machen Ihre Klasse erstreckt Abstractextends AbstractCollection ist viel einfacher zu implementieren Da es alle notwendigen Dinge für uns und nur, was Sie sich sorgen müssen, ist iterator() und size()

Verwandte Themen