首先,我有一个扩展AbstractMap的类。
public class ShowMap <K, V> extends AbstractMap <K, V>
Class有两个List类型的容器:
private List <K> keys = new ArrayList <K> ();
private List <V> values = new ArrayList <V> ();
班级也有几种方法。 方法V put采用类似键的参数并将其放入List键:
public V put (K key, V value){
V oldValue = this.get(key);
if (!keys.contains(key)){
keys.add(key);
values.add(value);
}
else{
values.set(keys.indexOf(key), value);
}
return oldValue;
}
方法V get从List值返回一个值,否则方法teturn null:
public V get (Object obje){
if (!keys.contains(obje))
return null;
return values.get(keys.indexOf(obje));
}
以下方法形成一组MapEntry,但它不起作用:
public Set<java.util.Map.Entry<K, V>> entrySet() {
Set <Map.Entry<K, V>> sets = new HashSet <Map.Entry<K, V>> ();
Iterator<K> ki = keys.iterator();
Iterator<V> vi = values.iterator();
while (ki.hasNext()){
sets.add(new MapEntry <K, V> (ki.next(), vi.next())); // This line should to work, however It doesn't work...
}
return sets;
}
当然主要方法是:
public static void main (String [] args){
ShowMap <String, String> SM = new ShowMap <String, String> ();
SM.putAll(Countries.FMap.capitals(10));
System.out.println(SM);
System.out.println(SM.get("Moscow"));
System.out.println(SM.entrySet());
}
非常感谢:)
答案 0 :(得分:1)
public Set<java.util.Map.Entry<K, V>> entrySet() {
Set <Map.Entry<K, V>> sets = new HashSet <Map.Entry<K, V>> ();
Iterator<K> ki = keys.iterator();
Iterator<V> vi = values.iterator();
while (ki.hasNext()){
sets.add(new MapEntry <K, V> (ki.next(), vi.next())); // This line should to work, however It doesn't work...
}
return sets;
}
在这里,您将返回一组Map.Entry而不是MapEntry。而且,MapEntry不是一个类。请更新代码。
答案 1 :(得分:1)
Map.Entry<K,V>
是一个界面。您可以为其实例化创建命名类,或使用匿名类,如下所示:
public Set<Map.Entry<K,V>> entrySet() {
Set<Map.Entry<K,V>> sets = new HashSet<Map.Entry<K,V>> ();
Iterator<K> ki = keys.iterator();
Iterator<V> vi = values.iterator();
while (ki.hasNext()){
final K key = ki.next();
final V val = vi.next();
sets.add(new Map.Entry<K,V>() {
public boolean equals(Object obj) {
if (!(obj is Map.Entry)) return false;
Map.Entry other = (Map.Entry)obj;
return key.equals(other.getKey()) && val.equals(other.getValue());
}
public int hashCode() {
return 31*key.hashCode()+val.hashCode();
}
public K getKey() { return key; }
public V getValue() { return val; }
public void setValue(V v) { throw new UnsupportedOperationException(); }
});
}
return sets;
}
匿名类提供了一个简单的接口实现。仅当您计划仅在单个方法内使用Map.Entry
时,此选项才适用。否则,最好使用具有类似功能的命名类。