实现数据篮子:多key对应1value,并提供put,get,remove等方法
例如:
key1=“张三”
key1,key2=“李四”
key1,key2,key3=“王五”
…
思路:
1.通过拓展map实现key-value键值对存储
2.put方法可变参数个数为n且至少为2,形如map.put(key1,key2,key3,…,value),key为1到(n-1)参数,第n个为value
3.考虑到前面的n-1个key有序,可以考虑用LinkedList存储所有key记为keyList
4.那么这个特殊的map就相当于keyList=value键值对,即Map<List, Object>
思路捋清楚了,算法片段如下:
public class Bus {
//初始化数据篮子
private static Map<List<Object>, Object> busMap = new HashMap<List<Object>, Object>();
//参数数组
private static Object[] arg;
public Boolean put(Object... args) {
//判断参数个数小于2,添加失败
if (args.length < 2) {
return false;
}
arg = (Object[]) args;
//设置key的集合
List<Object> key = setKey(arg, arg.length - 1);
//put(key,value)
busMap.put(key, args[args.length - 1]);
return true;
}
public static List<Object> setKey(Object[] arg, int len) {
//初始化存key集合
List<Object> keyList = new LinkedList<>();
//(1到n-1个参数)作为key存到keyList
for (int i = 0; i < len; i++) {
keyList.add(arg[i]);
}
return keyList;
}
public Object remove(Object... args) {
arg = (Object[]) args;
List<Object> key = setKey(arg, arg.length);
return busMap.remove(key);
}
public Object get(Object... args) {
if (args.length < 1) {
return false;
}
arg = (Object[]) args;
List<Object> key = setKey(arg, arg.length);
return busMap.get(key);
}
public int size() {
return busMap.size();
}
现在开始测试:
public static void main(String[] args) {
Bus bus = new Bus();
bus.put("key1","张三");
bus.put("key1","key2","李四");
bus.put("key1","key2","key3","王五");
System.out.println("the result1 is:\t"+bus.get("key1"));
System.out.println("the result2 is:\t"+bus.get("key1","key2"));
System.out.println("the result3 is:\t"+bus.get("key1","key2","key3"));
bus.remove("key1");
System.out.println("the result1 is:\t"+bus.get("key1"));
bus.remove("key1","key2","key3");
System.out.println("the result3 is:\t"+bus.get("key1","key2","key3"));
System.out.println("the result2 is:\t"+bus.get("key1","key2"));
}
输出
the result1 is: 张三
the result2 is: 李四
the result3 is: 王五
the result1 is: null
the result3 is: null
the result2 is: 李四
但是如果key数组是多个实体类呢,这里就需要每个实体类都实现hashCode跟equals方法了,这里不多测试
来源:CSDN
作者:进阶的枸杞茶
链接:https://blog.csdn.net/weixin_41788067/article/details/104020762