多key值单value的map

在跟某平台单点对接的时候,需要强制退出,这个时候需要个集合来存储Session

,在本系统内是使用的用户名userName,但是平台传递的是ssoToken,这个时候需要

通过 userName  和  ssoToken 都能找到这个Session对象.于是就用比较笨的办法实现了

如下所示:

package com.XXX;

import java.util.*;

/**
 * Created by admin on 2019/3/11.
 */
public class KeyHashMap<K,V>{
    private Map<K,V> dataMap=new HashMap<K,V>();
    private Map<K,K> keyMap=new HashMap<K,K>();

    /**
     * 维护key值,建议linkedKeys 带上属性名
     * 以免重复导致获取数据对不上
     * @param key
     * @param value
     * @param linkedKeys
     */
    public void put(K key,V value,K ...linkedKeys) {
        if(linkedKeys!=null){
            for(int i=0,len=linkedKeys.length;i<len;i++){
                keyMap.put(linkedKeys[i],key);
            }
        }
        dataMap.put(key,value);
    }

    /**
     * 根据key获取value
     * @param key
     * @return
     */
    public V get(K key) {
        if(dataMap.containsKey(key)){
           return   dataMap.get(key);
        }else if(keyMap.containsKey(key)){
            K k=keyMap.get(key);
            if(dataMap.containsKey(k)){
                return   dataMap.get(k);
            }
        }
        return null;
    }

    /**
     * 根据key删除 dataMap   keyMap 元素
     * @param key
     * @return
     */
    public void remove(K key) {
        if(dataMap.containsKey(key)){
            dataMap.remove(key);
        }else if(keyMap.containsKey(key)){
            K k=keyMap.get(key);
            if(dataMap.containsKey(k)){
                dataMap.remove(k);
            }
            Iterator<Map.Entry<K,K>> it=keyMap.entrySet().iterator();
            Map.Entry<K,K> entry=null;
            while(it.hasNext()){
                entry=it.next();
                if(entry.getValue().equals(k)){
                    it.remove();
                }
            }
        }
    }

    /**
     * 删除keymap的元素,dataMap不会处理
     * @param keyMapKey
     * @return
     */
    public void removeKeyMapKey(K keyMapKey) {
        if(keyMap.containsKey(keyMapKey)){
            keyMap.remove(keyMapKey);
        }
    }

    /**
     * 是否包含
     * @param key
     * @return
     */
    public boolean contains(K key) {
        if(dataMap.containsKey(key)||keyMap.containsKey(key)){
            return true;
        }
        return false;
    }

    /**
     * dataMap是否包含
     * @param dataMapKey
     * @return
     */
    public boolean containsDataMap(K dataMapKey) {
        if(dataMap.containsKey(dataMapKey)){
            return true;
        }
        return false;
    }

    /**
     * KeyMap是否包含
     * @param keyMapKey
     * @return
     */
    public boolean containsKeyMap(K keyMapKey) {
        if(keyMap.containsKey(keyMapKey)){
            return true;
        }
        return false;
    }

    /**
     * 返回dataMap集合大小
     * @return
     */
    public int  dataMapSize(){
        return dataMap.size();
    }

    /**
     * 返回keyMap集合大小
     * @return
     */
    public int  keyMapSize(){
        return keyMap.size();
    }


    /**
     * 返回dataMap指定key在keyMap中key数量
     * @return
     */
    public int  keyNum(K dataMapKey){
        int i=0;
        if(dataMap.containsKey(dataMapKey)){
            Iterator<Map.Entry<K,K>> it=keyMap.entrySet().iterator();
            Map.Entry<K,K> entry=null;
            while(it.hasNext()){
                entry=it.next();
                if(entry.getValue().equals(dataMapKey)){
                    i++;
                }
            }
        }
        return i;
    }

    /**
     * 返回集合大小
     * @return
     */
    public Set<Map.Entry<K,V>>  dataMapEntrySet(){
        return dataMap.entrySet();
    }

    /**
     * 返回集合大小
     * @return
     */
    public Set<Map.Entry<K,K>> keyMapEntrySet(){
        return keyMap.entrySet();
    }

    public static void main(String[] args) {
        KeyHashMap<String,String> keyMap=new KeyHashMap();
        keyMap.put("zhangsan","{.........}","userid:1","token:qwert","ssotoken:qwert");
        System.out.println(keyMap.get("userid:1"));
        System.out.println(keyMap.get("token:qwert"));
        System.out.println(keyMap.get("zhangsan"));
        System.out.println("keyMap指定键的值数量:"+keyMap.keyNum("zhangsan"));
        System.out.println(keyMap.dataMapSize()+"        "+keyMap.keyMapSize());
        keyMap.remove("userid:12");
        System.out.println(keyMap.dataMapSize()+"        "+keyMap.keyMapSize());
        keyMap.remove("userid:1");
        System.out.println(keyMap.dataMapSize()+"        "+keyMap.keyMapSize());
    }

}
 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值