Hashtable

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hallo

    ich bin gerade dabei eine eigene hashtable zu programmieren.
    ziel soll es sein eine Hash zu bauen die eine verkettung hat d.h. mit einer liste.

    array größe 10
    schlüssel berechnung modulo 10

    jetzt würden ja praktisch werte wie 12,22,32,102 in dem eintrag 2 in der dahinterliegenden liste eingefügt.

    ist meine überlegung richtig ?
    gibt es vielleicht schon einen fertigen code

    mfg
    t
  • Sollst du Generics verwenden, oder soll die Hashtable nur mit ints funktionieren?

    Damit kannst du schon mal loslegen:

    Quellcode

    1. import java.util.ArrayList;
    2. import java.util.List;
    3. public class Hashlist
    4. {
    5. ArrayList<ArrayList<Integer>> aList = new ArrayList<ArrayList<Integer>> ();
    6. public Hashlist ()
    7. {
    8. // create 10 lists
    9. for (int i = 0; i < 10; ++i)
    10. aList.add (new ArrayList<Integer> ());
    11. }
    12. public void add (int i)
    13. {
    14. // add to appropriate list
    15. aList.get (i % 10).add (new Integer (i));
    16. }
    17. public boolean contains (int i)
    18. {
    19. // check if value is contained
    20. for (Integer aInt : aList.get (i % 10))
    21. if (aInt.intValue () == i)
    22. return true;
    23. return false;
    24. }
    25. }
    Alles anzeigen
  • So die Hashtable steht 8)

    Quellcode

    1. public class Hash {
    2. protected class HashEntry {
    3. private Object key, value;
    4. public HashEntry(Object key, Object value) {
    5. this.key = key;
    6. this.value = value;
    7. }
    8. }
    9. public Hash(int capacity) {
    10. this.capacity = capacity;
    11. keys = new Vector[capacity];
    12. for (int i=0; i<capacity-1;i++) {
    13. keys[i] = new Vector();
    14. }
    15. }
    16. public void put(Object key, Object value) {
    17. keys[hashValue(key)].add(new HashEntry(key, value));
    18. }
    19. public int hashValue(Object key) {
    20. return Math.abs(key.hashCode()) % (capacity-1);
    21. }
    22. public void remove(Object key) {
    23. Vector list = keys[hashValue(key)];
    24. for (int i=list.size()-1; i>=0;i--) {
    25. HashEntry element = (HashEntry)list.get(i);
    26. if (element.key.equals(key)) list.remove(i);
    27. }
    28. }
    29. public Vector get(Object key) {
    30. Vector result = new Vector();
    31. Vector list = keys[hashValue(key)];
    32. for (int i=0; i<list.size();i++) {
    33. HashEntry element = (HashEntry)list.get(i);
    34. if (element.key.equals(key)) result.add(element.value);
    35. }
    36. return result;
    37. }
    38. private Vector[] keys;
    39. private int capacity;
    40. }
    Alles anzeigen