题目二 数据篮子

Posted newwind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目二 数据篮子相关的知识,希望对你有一定的参考价值。

一、【题目描述】

情景是这样,我需要一个数据篮子来满足系统各模块之间的数据共享,要求通过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 }

 

以上是关于题目二 数据篮子的主要内容,如果未能解决你的问题,请参考以下文章

《活着》片段

Java 求解划分字母区间

html 模板代码中的变种篮子项目

华为机试题--装满篮子

[2]力扣每日一题

P2028 龙兄摘苹果