1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| public class ListBaseMap<K, V> implements Map<K, V> { private LinkedList<Entry<K, V>> table; private KeyComparator<K> keyComparator;
public ListBaseMap(LinkedList<Entry<K, V>> table, KeyComparator<K> keyComparator) { this.table = table; this.keyComparator = keyComparator; }
public ListBaseMap(KeyComparator<K> keyComparator) { this.table = new LinkedList<>(); this.keyComparator = keyComparator; }
public ListBaseMap() { this.table = new LinkedList<>(); this.keyComparator = new NormalKeyComparator<>(); }
static class Node<K, V> implements Entry<K, V> { private K key; private V value;
public Node(K key, V value) { this.key = key; this.value = value; }
@Override public K getKey() { return this.key; }
@Override public V getValue() { return this.value; }
@Override public V setValue(V val) { V old = this.value; this.value = val; return old; }
@Override public boolean equals(Object obj) { if (obj == this) return true; if (obj instanceof Entry) { Entry<?, ?> e = (Entry<?, ?>) obj; return Objects.equals(e.getKey(), this.getKey()) && Objects.equals(e.getValue(), this.getValue()); } return false; }
@Override public String toString() { return "ke=["+key+"],value=["+value+"]"; } }
@Override public int size() { return table.size(); }
@Override public boolean isEmpty() { return table.isEmpty(); }
@Override public V get(K key) { if (size() > 0) { for (Entry<K, V> entry : table) { if (Objects.equals(key, entry.getKey())) { return entry.getValue(); } } } return null; }
@Override public V put(K key, V val) { Node<K, V> node = new Node<>(key, val); if (size() == 0) { table.add(node); } else { for (Entry<K, V> entry : table) { if (Objects.equals(key, entry.getKey())) { V old = entry.getValue(); entry.setValue(val); return old; } } table.add(node); } return null; }
@Override public V remove(K key) { if (size() > 0) { int count = 0; for (Entry<K, V> entry : table) { if (Objects.equals(key, entry.getKey())) { V oldVal = entry.getValue(); table.remove(count); return oldVal; } count++; } } return null; }
@Override public Collection<Entry<K, V>> entries() { return table; } }
|