Java中AbstractMap size()方法示例
在Java中,AbstractMap是一个抽象类,它实现了Map接口的基本操作,是所有实现Map接口的类的基类,提供了一些公共的方法,比如size()方法。本文将对AbstractMap size()方法做详细介绍,并附上实例代码。
AbstractMap size()方法
AbstractMap中的size()方法用于返回Map中key-value对的数量。
public int size() {
return entrySet().size();
}
在AbstractMap中,数据是使用EntrySet存储的,而size()方法返回的是EntrySet中元素个数,即Map中key-value对的数量。
需要注意的是,如果Map中存在重复的key,那么这些key只会被计算一次。
size()方法实例代码
我们来看一个使用size()方法的实例。首先,我们定义一个继承自AbstractMap的类:
import java.util.*;
class MyMap<K,V> extends AbstractMap<K,V> {
private List<Entry<K,V>> entries = new ArrayList<Entry<K,V>>();
@Override
public Set<Entry<K, V>> entrySet() {
return new HashSet<Entry<K, V>>(entries);
}
// 实现put()方法
@Override
public V put(K key, V value) {
V oldValue = null;
for (Entry<K, V> entry : entries) {
if (entry.getKey().equals(key)) {
oldValue = entry.setValue(value);
break;
}
}
if (oldValue == null) {
entries.add(new MyEntry<K, V>(key, value));
}
return oldValue;
}
// 实现get()方法
@Override
public V get(Object key) {
for (Entry<K, V> entry : entries) {
if (entry.getKey().equals(key)) {
return entry.getValue();
}
}
return null;
}
// 内部类MyEntry
private static class MyEntry<K,V> implements Entry<K,V> {
private K key;
private V value;
public MyEntry(K key, V value) {
this.key = key;
this.value = value;
}
@Override
public K getKey() {
return key;
}
@Override
public V getValue() {
return value;
}
@Override
public V setValue(V value) {
V oldValue = this.value;
this.value = value;
return oldValue;
}
}
}
这个类继承了AbstractMap,并实现了Map接口中要实现的几个基本方法:entrySet()、get()和put()。
entrySet()方法返回的是MyMap中的entrySet,采用HashSet存储。而put()和get()方法分别实现MyMap中的方法,通过遍历List<Entry<K,V>> entries实现put()和get()功能。
接下来,我们创建测试类TestMyMap,测试size()方法的使用:
import java.util.*;
public class TestMyMap {
public static void main(String[] args) {
MyMap<String,String> myMap = new MyMap<String,String>();
myMap.put("1", "A");
myMap.put("2", "B");
myMap.put("3", "C");
myMap.put("1", "D");
System.out.println("myMap size: " + myMap.size());
}
}
我们在myMap中插入了4个key-value对,在插入第四个(键为“1”,值为“D”)时,由于myMap中之前已经存在“1”这个键,所以“1”对应的值会更新为“D”。“1”对应的值从“A”更新为“D”后,myMap中key-value对的数量不变,因此myMap.size()得到的结果是3。
运行TestMyMap,输出结果如下:
myMap size: 3
结论
从上面的实例代码中我们可以看到,AbstractMap中的size()方法返回的是EntrySet中元素个数,即Map中key-value对的数量。如果Map中存在多个相同的key,那么这些key只会被计算一次。在定义实现Map接口的类时,我们可以通过实现entrySet()方法,使用不同的数据结构存储Map中的数据,从而实现不同的操作。
极客笔记