利用自定义泛型,自己简单实现HashMap
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。(来自百度百科)
实现步骤
1.首先HashMap表面保存的是Key和Value,但是实际上保存的是一个个的Entry,而Entry里面是Key和Value
[java] view plaincopy
- public class MyEntry<K, V> {
- private K key;
- private V value;
- public K getKey() {
- return key;
- }
- public void setKey(K key) {
- this.key = key;
- }
- public V getValue() {
- return value;
- }
- public void setValue(V value) {
- this.value = value;
- }
- }
2.利用泛型写自己的HashMap,继承HashSet,里有有一个entrys用来保存名-值对的集合。
[java] view plaincopy
- public class MyHashMap<K, V> extends HashSet {
- private Set<MyEntry<K, V>> entrys = new HashSet<MyEntry<K, V>>();
- }
3.实现HashMap的put(K key, V value)和V get(K key)方法
[java] view plaincopy
- public void put(K key, V value) {
- MyEntry<K, V> myEntry = new MyEntry<K, V>();
- myEntry.setKey(key);
- myEntry.setValue(value);
- entrys.add(myEntry);
- }
- public V get(K key) {
- V value = null;
- for (Iterator<MyEntry<K, V>> i = entrys.iterator(); i.hasNext();) {
- MyEntry<K, V> entry = i.next();
- if (key.equals(entry.getKey())) {
- value = entry.getValue();
- break;
- }
- }
- return value;
- }
4.实现Set<MyEntry<K, V>> entrySet(),Set<K> keySet(),String toString()三个迭代方法
[java] view plaincopy
- public Set<MyEntry<K, V>> entrySet() {
- return entrys;
- }
- public Set<K> keySet() {
- Set<K> set = new HashSet<K>();
- for (Iterator<MyEntry<K, V>> i = entrys.iterator(); i.hasNext();) {
- MyEntry<K, V> myEntry = i.next();
- set.add(myEntry.getKey());
- }
- return set;
- }
- @Override
- public String toString() {
- StringBuffer sb = new StringBuffer(“[“);
- for (Iterator<MyEntry<K, V>> i = entrys.iterator(); i.hasNext();) {
- MyEntry<K, V> myEntry = i.next();
- sb.append(myEntry.getKey());
- sb.append(“=”);
- sb.append(myEntry.getValue());
- sb.append(“,”);
- }
- sb.deleteCharAt(sb.length() – 1);
- sb.append(“]”);
- return sb.toString();
- }
5.测试。
[java] view plaincopy
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- MyHashMap<String, String> map = new MyHashMap<String, String>();
- map.put(“hello1”, “world1”);
- map.put(“hello2”, “world2”);
- System.out.println(map);
- Set<String> set = map.keySet();
- for (String string : set) {
- System.out.println(string);
- }
- }
- }
有图有真相,总结:HashMap就是自定义索引的Set