58 lines
1.8 KiB
Java
Raw Normal View History

2015-09-07 11:44:36 -06:00
// containersindepth/SlowMap.java
2015-11-14 16:18:05 -08:00
// <20>2016 MindView LLC: see Copyright.txt
2015-06-15 17:47:35 -07:00
// A Map implemented with ArrayLists.
import java.util.*;
import onjava.*;
2015-06-15 17:47:35 -07:00
2015-09-07 11:44:36 -06:00
public class SlowMap<K, V> extends AbstractMap<K, V> {
2015-06-15 17:47:35 -07:00
private List<K> keys = new ArrayList<>();
private List<V> values = new ArrayList<>();
@Override
public V put(K key, V value) {
V oldValue = get(key); // The old value or null
if(!keys.contains(key)) {
keys.add(key);
values.add(value);
} else
values.set(keys.indexOf(key), value);
return oldValue;
}
@Override
public V get(Object key) { // key is type Object, not K
if(!keys.contains(key))
return null;
return values.get(keys.indexOf(key));
}
@Override
2015-09-07 11:44:36 -06:00
public Set<Map.Entry<K, V>> entrySet() {
Set<Map.Entry<K, V>> set= new HashSet<>();
2015-06-15 17:47:35 -07:00
Iterator<K> ki = keys.iterator();
Iterator<V> vi = values.iterator();
while(ki.hasNext())
set.add(new MapEntry<>(ki.next(), vi.next()));
return set;
}
public static void main(String[] args) {
SlowMap<String,String> m= new SlowMap<>();
m.putAll(Countries.capitals(15));
System.out.println(m);
System.out.println(m.get("BULGARIA"));
System.out.println(m.entrySet());
}
2015-09-07 11:44:36 -06:00
}
/* Output:
2015-06-15 17:47:35 -07:00
{ANGOLA=Luanda, CAPE VERDE=Praia, EGYPT=Cairo,
BURUNDI=Bujumbura, BENIN=Porto-Novo, ALGERIA=Algiers,
CAMEROON=Yaounde, CONGO=Brazzaville, CENTRAL AFRICAN
REPUBLIC=Bangui, EQUATORIAL GUINEA=Malabo, COMOROS=Moroni,
DJIBOUTI=Dijibouti, BURKINA FASO=Ouagadougou,
CHAD=N'djamena, BOTSWANA=Gaberone}
null
[ANGOLA=Luanda, CAPE VERDE=Praia, EGYPT=Cairo,
BURUNDI=Bujumbura, BENIN=Porto-Novo, ALGERIA=Algiers,
CAMEROON=Yaounde, CONGO=Brazzaville, CENTRAL AFRICAN
REPUBLIC=Bangui, EQUATORIAL GUINEA=Malabo, COMOROS=Moroni,
DJIBOUTI=Dijibouti, BURKINA FASO=Ouagadougou,
CHAD=N'djamena, BOTSWANA=Gaberone]
2015-09-07 11:44:36 -06:00
*/