JAVA 三键KEY 对应 VALUE,MAP
package com.quickhot.utilities;/*
* @author wangjin
* @date 2022/5/11
*/
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
/**
* 三键对应值,全部采用泛型。可随意使用。
* three key map
* @param <X> x key值
* @param <Y> y key值
* @param <Z> z key值
* @param <V> v value值
*/
public final class TriKey <X,Y,Z,V>{
private X x;
private Y y;
private Z z;
private ConcurrentHashMap<X, ArrayList<V>> xList = new ConcurrentHashMap<>();
private ConcurrentHashMap<Y, ArrayList<V>> yList = new ConcurrentHashMap<>();
private ConcurrentHashMap<Z, ArrayList<V>> zList = new ConcurrentHashMap<>();
public void put(X x,Y y,Z z,V v){
ArrayList<V> avialable = get(x,y,z);
if (null != avialable){
xList.get(x).removeAll(avialable);
yList.get(y).removeAll(avialable);
zList.get(z).removeAll(avialable);
}
if (xList.containsKey(x)){
xList.get(x).add(v);
} else {
ArrayList<V> xArrList = new ArrayList<>();
xArrList.add(v);
xList.put(x,xArrList);
}
if (yList.containsKey(y)){
yList.get(y).add(v);
} else {
ArrayList<V> yArrList = new ArrayList<>();
yArrList.add(v);
yList.put(y,yArrList);
}
if (zList.containsKey(z)){
zList.get(z).add(v);
} else {
ArrayList<V> zArrList = new ArrayList<>();
zArrList.add(v);
zList.put(z,zArrList);
}
}
public ArrayList<V> get(X x, Y y, Z z){
ArrayList<V> xs = xList.get(x);
ArrayList<V> ys = yList.get(y);
ArrayList<V> zs = zList.get(z);
if(null==xs || null==ys || null==zs) return null;
ArrayList<V> result = new ArrayList<>(xs);
result.retainAll(ys);
result.retainAll(zs);
return result;
}
}
使用方法
public void run(ApplicationArguments args) throws Exception {
TriKey testTriKey = new TriKey();
testTriKey.put(0,0,0,"坐标000");
testTriKey.put(0,0,0,"第二坐标000");
testTriKey.put(0,0,1d,"坐标001");
testTriKey.put(0,"b",0,"坐标010");
testTriKey.put(0,"b",0,"坐标010b");
testTriKey.put(0,1,1,"坐标011");
testTriKey.put(1,0,0,100);
ArrayList value = testTriKey.get(0, "b", 0);
logger.info(value.toString());
ArrayList value1 = testTriKey.get(0, 1, 1);
logger.info(value1.toString());
ArrayList value2 = testTriKey.get(0, 0, 0);
logger.info(value2.toString());
}
这个博客介绍了一个名为TriKey的Java类,它实现了使用三个键(X、Y、Z)来映射一个值(V)的数据结构。TriKey内部使用了ConcurrentHashMap以确保线程安全,并提供了put和get方法进行数据操作。示例展示了如何创建和使用这个类来存储和检索数据。
198

被折叠的 条评论
为什么被折叠?



