在跟某平臺單點對接的時候,需要強制退出,這個時候需要個集合來存儲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());
}
}