1. 程式人生 > >題目二 數據籃子

題目二 數據籃子

i++ 取值 一個數 lse pub tar pre yar null

一、【題目描述】

情景是這樣,我需要一個數據籃子來滿足系統各模塊之間的數據共享,要求通過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 }

題目二 數據籃子