HashMapList<T, E>
HashMapList类本质上是HashMap<T, Arraylist<E>>的简写,从类型为 T 的项映射到类型为 E 的 Arraylist。
冗余代码
代码语言:java复制 HashMap<Integer, Arraylist<String>> maplist = new HashMap<Integer, Arraylist<String>>();
for (String s : strings) {
int key = computeValue(s);
if (!maplist.containsKey(key)) {
maplist.put(key, new Arraylist<String>());
}
maplist.get(key).add(s);
}
现在,可以这样写为:
代码语言:java复制 HashMaplist<Integer, String> maplist new HashMapList<Integer, String>();
for (String s : strings) {
int key = computeValue(s);
if (!maplist.computeValue(s));
maplist.put(key, s);
}
代码实现
在HashMapList<T, E>
类中:
T
通常代表键(key)的类型。E
通常代表值(value)的类型。
public class HashMapList<T, E> {
private HashMap<T, Arraylist<E>> map = new HashMap<T, Arraylist<E>>();
/* key插入项item*/
public void put(T key, E item) {
if (!map.containsKey(key)) {
map.put(key, new Arraylist<E>());
}
map.get(key).add(item);
}
/* 键key插入项列表*/
public void put(T key, Arraylist<E> items) {
map.put(key, items);
}
/* 获取key的项列表 */
public Arraylist<E> get(T key) {
return map.get(key);
}
/* 检查hashmaplist是否包含key*/
public boolean containsKey(T key) {
return map.containsKey(key);
}
/* 检查key的列表是否包含value*/
public boolean containsKeyValue(T key, E value) {
Arraylist<E> list = get(key);
if (list == null) return false;
return list.contains(value);
}
/* 获取key列表*/
public Set<T> keySet() {
return map.keySet();
}
@Override
public String toString() {
return map.toString();
}
}
使用示例
代码语言:java复制public class HashMapListExample {
public static void main(String[] args) {
//创建一个HashMapList
HashMapList<String, Integer> mapList = new HashMapList<>();
//mapList添加数据
mapList.put("年龄", 25);
mapList.put("年龄", 30);
mapList.put("分数", 85);
mapList.put("分数", 90);
//输出整个mapList
System.out.println(mapList.toString());
//获取键"年龄"下的全部值
ArrayList<Integer> ages = mapList.get("年龄");
System.out.println("年龄列表: " ages.toString());
//检查是否包含键"分数"
boolean Scores = mapList.containsKey("分数");
System.out.println("是否包含'分数'键: " Scores);
}
}
结论
HashMapList类提供了管理键和列表的映射关系,减少了代码冗余,提高了代码的可读性和维护性。
谢谢大家阅读:)