zoukankan      html  css  js  c++  java
  • 题目二 数据篮子

    一、【题目描述】

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

    第一次发贴,也是在看了首页吵架贴后有感,也给博客园提个提议
    【把玩信息图之标签云】看看我一年的邮件在扯什么
    VS发布Web时自动调用YUICompressor批量压缩JS、CSS
    用JavaScript实现自己的DOM选择器
    一键发布应用了seajs的asp.net项目
    在JavaScript中应用单例模式
    Qt 资料大全
    C#的不足(1):匿名类型的不足之处
    LINQ解析:LINQ to Objects简介
  • 原文地址:https://www.cnblogs.com/newwind/p/9680239.html
Copyright © 2011-2022 走看看