/**
* 书本:《Thinking In Java》
* 功能:理解hashCode,使用散列的目的在于:想要使用一个对象来查找另一个对象
* 文件:SlowMap.java
* 时间:2015年5月4日08:01:00
* 作者:cutter_point
*/
package Lesson17Containers;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.mindview.util.Countries;
public class SlowMap<K, V> extends AbstractMap<K, V>
{
private List<K> keys = new ArrayList<K>();
private List<V> values = new ArrayList<V>();
public V put(K key, V value)
{
V oldValue = this.get(key); //根据key得到值,或者是为null
//判断容器中是否含有这个值,没有就添加,有就设定新的值
if(!keys.contains(key))
{
keys.add(key);
values.add(value);
}
else
{
//首先根据key得到key在keys里面的索引,然后在values里面找到和它对应的位置天机进去
values.set(keys.indexOf(key), value);
}
return oldValue; //返回旧值
}
public V get(Object key)
{
//key 是Object类型不是K
if(!keys.contains(key))
return null; //不包含就返回null
return values.get(keys.indexOf(key));
}
public Set<java.util.Map.Entry<K, V>> entrySet()
{
Set<Map.Entry<K, V>> set = new HashSet<Map.Entry<K, V>>();
Iterator<K> ki = keys.iterator(); //分别创建两个list的迭代器进行遍历
Iterator<V> vi = values.iterator();
while(ki.hasNext()) //后面只要还有值
{
//给这个set集合添加一个元素,元素类型是map类型的
set.add(new MapEntry<K, V>(ki.next(), vi.next()));
}
return set; //返回set集合
}
public static void main(String[] args)
{
SlowMap<String, String> m = new SlowMap<String, String>();
m.putAll(Countries.capitals(15)); //获取15个国家的名字作为元素
System.out.println(m); //这个和第三个是不一样的,这个是输出键值对,下面输出的是一个数组
System.out.println(m.get("BULGARIA"));
System.out.println(m.entrySet());
}
}
输出:
{CHAD=N'djamena, ALGERIA=Algiers, BOTSWANA=Gaberone, BURUNDI=Bujumbura, CONGO=Brazzaville, DJIBOUTI=Dijibouti, COMOROS=Moroni, EQUATORIAL GUINEA=Malabo, ANGOLA=Luanda, EGYPT=Cairo, CAPE VERDE=Praia, BURKINA FASO=Ouagadougou, BENIN=Porto-Novo, CENTRAL AFRICAN REPUBLIC=Bangui, CAMEROON=Yaounde}
null
[CHAD=N'djamena, ALGERIA=Algiers, BOTSWANA=Gaberone, BURUNDI=Bujumbura, CONGO=Brazzaville, DJIBOUTI=Dijibouti, COMOROS=Moroni, EQUATORIAL GUINEA=Malabo, ANGOLA=Luanda, EGYPT=Cairo, CAPE VERDE=Praia, BURKINA FASO=Ouagadougou, BENIN=Porto-Novo, CENTRAL AFRICAN REPUBLIC=Bangui, CAMEROON=Yaounde]