相关疑难解决方法(0)

Java Collection的多个索引 - 最基本的解决方案?

我正在寻找在Java Collection上创建多个索引的最基本的解决方案.

所需功能:

  • 删除值后,必须删除与该值关联的所有索引条目.
  • 索引查找必须比线性搜索更快(至少与TreeMap一样快).

边条件:

  • 不依赖于大型(如Lucene)库.没有罕见或未经过良好测试的库.没有数据库.
  • 像Apache Commons Collections这样的库可以.
  • 更好的是,如果单独使用JavaSE(6.0).
  • 编辑:没有自我实现的解决方案(感谢答案暗示这一点 - 最好让他们在这里完整,但我已经有一个非常类似Jay的解决方案)每当有几个人发现,他们实现了同样的事情,这应该成为一些公共图书馆的一部分.

当然,我可以写一个自己管理多个地图的课程(这并不难,但感觉就像重新发明轮子一样).所以我想知道,如果没有它可以完成 - 同时仍然得到类似于使用单个索引java.util.Map的简单用法.

谢谢,克里斯

更新

它看起来好像我们没有找到任何东西.我喜欢你所有的答案 - 自我开发的版本,数据库类库的链接.

这就是我真正想要的:在(a)Apache Commons Collections或(b)Google Collections/Guava中使用这些功能.或许是一个非常好的选择.

其他人也会错过这些库中的这个功能吗?他们提供各种各样的东西,如MultiMaps,MulitKeyMaps,BidiMaps,......我觉得,它很适合这些库 - 它可以调用MultiIndexMap.你怎么看?

java indexing collections

48
推荐指数
5
解决办法
2万
查看次数

在java中使用二维键映射

我想要一个由两个键索引的映射(一个映射,其中您使用两个键放置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分别是第一键,第二键和值的类型)

java hash map

23
推荐指数
2
解决办法
3万
查看次数

单值映射Java的多个键

我认为我的问题与此类似:如何使用多个键实现Map?但有一个重要的区别.在那个问题中(如果我对它的理解是正确的,请告诉我,如果不是这样),键应该始终是唯一的.我希望在表单中有一个Map: MyMap ,其中键不一定是唯一的.如果这没有意义,我基本上想要一个二维数组,而不是通过坐标引用元素,我想通过成对的对象来引用它们.

任何人对这个有效的图书馆或自己实施的好方法都有任何想法吗?对于图书馆来说,我看过Apache Commons和Guava,似乎没有我想要的东西.

java map multidimensional-array data-structures

20
推荐指数
2
解决办法
4万
查看次数

apache.commons.collections.CollectionUtils是否有可行的通用替代方案?

有可行的通用版本org.apache.commons.collections.CollectionUtils吗?如果没有,为什么不呢?这似乎是一个显而易见的需求.或者Java社区是否放弃了功能编码,直到Java 17中添加了闭包?

java collections apache-commons-collection

15
推荐指数
2
解决办法
7703
查看次数

Java映射与3列的键

我需要一张地图,其中我的密钥应该基于3列,比方说C1, C2, C3.C1优先级最高.C2具有小于一C1C3具有小于一C2.

我如何在地图中创建密钥,以便如果有人要求提供信息C1,我应该能够提供所有的值C1.如果要求,我也应该能够返回所有值C1 & C2

java algorithm data-structures

7
推荐指数
1
解决办法
7089
查看次数

MultiKeyMap get方法

我想使用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以获得正确的值?

java collections hashmap

6
推荐指数
2
解决办法
2万
查看次数

用多个键映射

我正在尝试实现类似的地图

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(不要只为此包含整个库).

我试图实现一个类(我可以用作一个键),它将具有key1key2作为属性,但实现一个有效的哈希码,不考虑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)

java collections multikey

6
推荐指数
1
解决办法
2万
查看次数

多键哈希图

最近,我接受了一次采访,以在DS中保存大量的员工详细信息。

我以emp Id为键将解决方案作为Hashmap给出。

后续问题是用户是否要基于名称搜索如何实现它。我建议使用emp名称作为键,并使用Arraylist保存所有具有相同名称的员工。

下一个后续问题很棘手,需要创建一个ONE映射,以便用户可以根据emp ID或emp名称进行搜索。如何在地图中实现?

以内存有效的方式实现它。

java

5
推荐指数
1
解决办法
590
查看次数

有两个键的地图

可能的重复:
如何实现具有多个键的 Map?
单值映射的多个键 Java

我必须根据两个传入的字符串属性获取枚举的值。我一直在做这个作为单个值的映射。现在我面临着串联。有没有办法让地图有两个键,这样我就可以

Map.get("attr1","attr2");
Run Code Online (Sandbox Code Playgroud)

这将返回正确的枚举。或者我是否只需要连接所有可能的值并将其用作键?

我正在寻找干净的解决方案(我们不都是:P)

java string concat key map

2
推荐指数
1
解决办法
2151
查看次数

Java 8:以数据表的形式存储和检索数据

我想以数据表的形式存储数据,如下所示:

+--------+-------+-----+-----+
|        |   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)

java datatable store java-8

1
推荐指数
1
解决办法
1257
查看次数