我正在寻找在Java Collection上创建多个索引的最基本的解决方案.
所需功能:
边条件:
当然,我可以写一个自己管理多个地图的课程(这并不难,但感觉就像重新发明轮子一样).所以我想知道,如果没有它可以完成 - 同时仍然得到类似于使用单个索引java.util.Map的简单用法.
谢谢,克里斯
它看起来好像我们没有找到任何东西.我喜欢你所有的答案 - 自我开发的版本,数据库类库的链接.
这就是我真正想要的:在(a)Apache Commons Collections或(b)Google Collections/Guava中使用这些功能.或许是一个非常好的选择.
其他人也会错过这些库中的这个功能吗?他们提供各种各样的东西,如MultiMaps,MulitKeyMaps,BidiMaps,......我觉得,它很适合这些库 - 它可以调用MultiIndexMap.你怎么看?
我想要一个由两个键索引的映射(一个映射,其中您使用两个键放置AND检索值)在Java中.为了清楚起见,我正在寻找以下行为:
map.put(key1, key2, value);
map.get(key1, key2); // returns value
map.get(key2, key1); // returns null
map.get(key1, key1); // returns null
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?更具体地说,我应该使用:
Map<K1,Map<K2,V>>
Map<Pair<K1,K2>, V>
其他?
(其中K1,K2,V分别是第一键,第二键和值的类型)
我认为我的问题与此类似:如何使用多个键实现Map?但有一个重要的区别.在那个问题中(如果我对它的理解是正确的,请告诉我,如果不是这样),键应该始终是唯一的.我希望在表单中有一个Map: MyMap ,其中键不一定是唯一的.如果这没有意义,我基本上想要一个二维数组,而不是通过坐标引用元素,我想通过成对的对象来引用它们.
任何人对这个有效的图书馆或自己实施的好方法都有任何想法吗?对于图书馆来说,我看过Apache Commons和Guava,似乎没有我想要的东西.
有可行的通用版本org.apache.commons.collections.CollectionUtils吗?如果没有,为什么不呢?这似乎是一个显而易见的需求.或者Java社区是否放弃了功能编码,直到Java 17中添加了闭包?
我需要一张地图,其中我的密钥应该基于3列,比方说C1, C2, C3.C1优先级最高.C2具有小于一C1和C3具有小于一C2.
我如何在地图中创建密钥,以便如果有人要求提供信息C1,我应该能够提供所有的值C1.如果要求,我也应该能够返回所有值C1 & C2
我想使用Apache Collection中的MultiKeyMap,因为我需要一个带有两个键和一个值的HashMap.要放置元素我这样做:
private MultiKeyMap multiKey = new MultiKeyMap();
multiKey.put("key1.1", "key2.1", "value1");
Run Code Online (Sandbox Code Playgroud)
对于get元素,我这样做:
String s = multiKey.get("key1.1");
Run Code Online (Sandbox Code Playgroud)
但是String的结果是空的 ......如果我传递了两个键,就像那样:
String s = multiKey.get("key1.1", "key2.1");
Run Code Online (Sandbox Code Playgroud)
String s的值为value1 ...
当我只传递两个密钥中的一个时,如何扩展MultiKeyMap以获得正确的值?
我正在尝试实现类似的地图
Map<<key1, key2>, List<value>>
Run Code Online (Sandbox Code Playgroud)
地图应包含2个键,相应的值将是一个列表.如果更改一个键值相等,我想在同一列表中添加记录 例如,考虑以下记录
R1[key1, key2]
R2[key1, null/empty] - Key1 is equal
R3[null/empty, key2] - Key2 is equal
R4[key1, key2] - Key1 and Key2 both are equal.
Run Code Online (Sandbox Code Playgroud)
所有应该插入相同的列表中
Key = <Key1,Key2>
Value = <R1, R2, R3, R4>
Run Code Online (Sandbox Code Playgroud)
我不能使用Guava表或公共MulitKeyMap(不要只为此包含整个库).
我试图实现一个类(我可以用作一个键),它将具有key1和key2作为属性,但实现一个有效的哈希码,不考虑key1和key2似乎有点(或可能很多)棘手
public class Key {
private int key1;
private int key2;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
// Cant include key1 and …Run Code Online (Sandbox Code Playgroud) 最近,我接受了一次采访,以在DS中保存大量的员工详细信息。
我以emp Id为键将解决方案作为Hashmap给出。
后续问题是用户是否要基于名称搜索如何实现它。我建议使用emp名称作为键,并使用Arraylist保存所有具有相同名称的员工。
下一个后续问题很棘手,需要创建一个ONE映射,以便用户可以根据emp ID或emp名称进行搜索。如何在地图中实现?
以内存有效的方式实现它。
可能的重复:
如何实现具有多个键的 Map?
单值映射的多个键 Java
我必须根据两个传入的字符串属性获取枚举的值。我一直在做这个作为单个值的映射。现在我面临着串联。有没有办法让地图有两个键,这样我就可以
Map.get("attr1","attr2");
Run Code Online (Sandbox Code Playgroud)
这将返回正确的枚举。或者我是否只需要连接所有可能的值并将其用作键?
我正在寻找干净的解决方案(我们不都是:P)
我想以数据表的形式存储数据,如下所示:
+--------+-------+-----+-----+
| | s1 | s2 | s3 |
+--------+-------+-----+-----+
| c1 | 5 | 7 | 7 |
+--------+-------+-----+-----+
| c2 | 1 | 6 | 9 |
+--------+-------+-----+-----+
| c3 | 0 | 9 | 6 |
+--------+-------+-----+-----+
Run Code Online (Sandbox Code Playgroud)
在java中存储它的好方法是什么,这样我就可以通过它们的密钥来检索数据.
我需要一个看起来像这样的方法:
public int getData(String row, String column);
// Example:
int i = getData("c1", "s1") // Would return 5
Run Code Online (Sandbox Code Playgroud)