一、【题目描述】
情景是这样,我需要一个数据篮子来满足系统各模块之间的数据共享,要求通过key-value的形式储存和访问数据,但单key太容易出现冲突了,所以要求支持多key(不限制key的数量)。
试题要求】
保存数据
bus.put(“key1”,”key2” ,value1);
bus.put(“key1”,”key2”,”key3”,value2);
注意每个key下面都可以储存数据
获取数据(key必须按照保存value时候key的顺序)
let value1=bus.get(“key1”,”key2”);
let value2=bus.get(“key1”,”key2”,”key3”);
清理数据
bus.remove(“key1”). //把key1下面的所有节点删除
二、直接上测试代码:
1 package com.test.bus; 2 3 import java.util.Arrays; 4 import java.util.HashMap; 5 import java.util.Map; 6 7 /** 8 * 数据篮子 9 * @function 10 * @author 小风微凉 11 * @time 2018-9-15 上午10:19:44 12 */ 13 public class Bus { 14 /** 15 * 数据仓库 16 */ 17 private static Map desMap=new HashMap<Object[], Object>(); 18 19 /** 20 * 压入数据 21 * @param args key1,key2...value1 22 * @return 23 */ 24 public boolean put(Object... args){ 25 if(args.length==1){ 26 System.out.println("输入参数有误,至少输入2个参数!"); 27 return false; 28 } 29 Object[] curArr=new Object[args.length-1]; 30 for(int i=0;i<args.length;i++){ 31 if(i==args.length-1){//value 32 desMap.put(curArr, args[i]); 33 System.out.println("数据保存成功"); 34 return true; 35 }else{//key 36 System.arraycopy(args, 0, curArr, 0, args.length-1); 37 } 38 } 39 return false; 40 } 41 /** 42 * 判断key是否存在 43 * @param Key 44 * @return 45 */ 46 private Object[] isExist(Object key){ 47 boolean flag=false; 48 Object[] retObj=null; 49 for(Object keys:desMap.keySet()){ 50 Object[] keyArr=(Object[]) keys; 51 for(Object o:keyArr){ 52 if(o==key || o.equals(key)){ 53 flag=true; 54 retObj=keyArr; 55 break; 56 } 57 } 58 } 59 return retObj; 60 } 61 /** 62 * 判断key是否存在 63 * @param keys key1,key2,key3... 64 * @return 65 */ 66 private Object[] isExist(Object... keys){ 67 Object[] retObj=null; 68 for(Object klist:desMap.keySet()){ 69 Object[] keyArr=(Object[]) klist; 70 String curStr=printArr(keys); 71 String srcStr=printArr(keyArr); 72 if(srcStr.indexOf(curStr)!=-1){//找到了 73 retObj=keyArr; 74 break; 75 } 76 } 77 return retObj; 78 } 79 /** 80 * 将数组按照字符串的格式输出 81 * @param arr 82 * @return 83 */ 84 private String printArr(Object[] arr){ 85 String str=""; 86 for(Object o:arr){ 87 str+=o.toString(); 88 } 89 return str; 90 } 91 /** 92 * 取值 93 * @param args key1,key2.key3...keyn 94 * @return 95 */ 96 public boolean get(Object... args){ 97 Object[] arrObj=isExist(args); 98 boolean bol=false; 99 if(arrObj!=null){//存在 100 System.out.println("查找结果:"+desMap.get(arrObj)); 101 bol=true; 102 }else{ 103 System.out.println("未找到对应的数据"); 104 } 105 return bol; 106 } 107 public boolean remove(Object... args){ 108 Object[] arrObj=isExist(args); 109 boolean bol=false; 110 if(arrObj!=null){//找到了 111 Object[] newObj=null; 112 for(int i=0;i<arrObj.length;i++){ 113 if(arrObj[i]==args[0]){ 114 //得到新数组 115 newObj=new Object[i]; 116 System.arraycopy(arrObj, 0, newObj, 0, i); 117 //删除map中旧数据 118 Object value=desMap.get(arrObj); 119 desMap.remove(arrObj); 120 desMap.put(newObj, value); 121 System.out.println("数据删除成功"); 122 break; 123 } 124 } 125 bol=true; 126 }else{ 127 System.out.println("未找到要删除的数据"); 128 } 129 return bol; 130 } 131 private void prit(Object[] arr){ 132 System.out.println("*********开始打印*************"); 133 for(Object o:arr){ 134 System.out.println(o); 135 } 136 System.out.println("*********打印结束*************"); 137 } 138 public static void main(String[] args) { 139 140 Bus bus=new Bus(); 141 //压入数据 142 bus.put("key1","key2","key3","key4","key5","key6","value1"); 143 //打印key 144 System.out.println("当前仓库中数据-key"); 145 for(Object key:desMap.keySet()){ 146 Object[] keyArr=(Object[]) key; 147 for(Object o:keyArr){ 148 System.out.println(o); 149 } 150 } 151 //查找数据 152 bus.get("key1"); 153 bus.get("key1","key2"); 154 bus.get("key1","key2","key3"); 155 bus.get("key1","key3"); 156 //删除数据 157 bus.remove("key2","key3"); 158 System.out.println("当前仓库中数据-key"); 159 for(Object key:desMap.keySet()){ 160 Object[] keyArr=(Object[]) key; 161 for(Object o:keyArr){ 162 System.out.println(o); 163 } 164 } 165 bus.get("key1","key3"); 166 bus.get("key1"); 167 //压入新的数据 168 bus.put("key1","key2","key3","value2"); 169 bus.put("key1","key2","key3","value3"); 170 //打印key 171 for(Object key:desMap.keySet()){ 172 System.out.println(">----------------<"); 173 Object[] keyArr=(Object[]) key; 174 for(Object o:keyArr){ 175 System.out.println(o); 176 } 177 } 178 // 179 bus.get("key1"); 180 } 181 private void test1(){ 182 new Bus().put("key1","key2","key3","value1"); 183 for(Object key:desMap.keySet()){ 184 Object[] keyArr=(Object[]) key; 185 for(Object o:keyArr){ 186 System.out.println(o); 187 } 188 } 189 } 190 }