利用自定义泛型,自己简单实现HashMap (一)

2014-11-24 11:30:17 · 作者: · 浏览: 13

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。(来自百度百科)


实现步骤


1.首先HashMap表面保存的是Key和Value,但是实际上保存的是一个个的Entry,而Entry里面是Key和Value


[java]
public class MyEntry {

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;
}

}

public class MyEntry {

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]
public class MyHashMap extends HashSet {

private Set> entrys = new HashSet>();

}

public class MyHashMap extends HashSet {

private Set> entrys = new HashSet>();

}
3.实现HashMap的put(K key, V value)和V get(K key)方法


[java]
public void put(K key, V value) {
MyEntry myEntry = new MyEntry();
myEntry.setKey(key);
myEntry.setValue(value);

entrys.add(myEntry);
}

public V get(K key) {
V value = null;
for (Iterator> i = entrys.iterator(); i.hasNext();) {
MyEntry entry = i.next();
if (key.equals(entry.getKey())) {
value = entry.getValue();
break;
}
}

return value;
}

public void put(K key, V value) {
MyEntry myEntry = new MyEntry();
myEntry.setKey(key);
myEntry.setValue(value);

entrys.add(myEntry);
}

public V get(K key) {
V value = null;
for (Iterator> i = entrys.iterator(); i.hasNext();) {
MyEntry entry = i.next();
if (key.equals(entry.getKey())) {
value = entry.getValue();
break;
}
}

return value;
}4.实现Set> entrySet(),Set keySet(),String toString()三个迭代方法


[java]
public Set> entrySet() {
return entrys;
}

public Set keySet() {
Set set = new HashSet();
for (Iterator> i = entrys.iterator(); i.hasNext();) {
MyEntry myEntry = i.next();
set.add(myEntry.getKey());
}
return set;
}

@Override
public String toString() {
StringBuffer sb = new StringBuffer("[");
for (Iterator> i = entrys.iterator(); i.hasNext();) {
MyEntry 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();
}

public Set> entrySet() {
return entrys;
}

public Set keySet() {
Set set = new HashSet();
for (Iterator> i = entrys.iterator(); i.hasNext();) {
MyEntry myEntry = i.next();
set.add(myEntry.getKey());
}
return set;
}

@Override
public String toString() {
StringBuffer sb = new StringBuffer("[");
for (Iterator> i = entrys.iterator(); i.hasNext();) {
MyEntry 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]
public class Test {

/**
* @par