多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());
    }

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章