4

我的问题可能听起来很傻,但想知道 Java 中是否有任何 Collection 对象在单个 Collection 对象中存储索引、键和值?

我有以下内容:

Enumeration hs = request.getParameterNames();
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();
while (hs.hasMoreElements()) {
    linkedHashMap.put(value, request.getParameter(value));
}

上面将key和value存储在linkedHashMap中,但它没有索引。如果有,那么我可以通过 index(pos) 调用并获取相应的键和值。

编辑 1

我想有条件地检查 index(position) 是否为 x 然后获取相应的键和值对并使用查询构造一个字符串。

4

3 回答 3

3

正如其他人所提到的,Java 集合不支持这一点。一种解决方法是Map<R, Map<C, V>>. 但是使用起来太丑了。你可以和番石榴一起去。它提供了一个Table集合类型。它具有以下格式Table<R, C, V>。我还没有尝试过,但我认为这对你有用。

Enumeration hs = request.getParameterNames();
Table<Integer, String, String> table = HashBasedTable.create();
while (hs.hasMoreElements()) {
    table.put(index, value, request.getParameter(value));
}

现在,如果你想要键值对,比如说索引1。做吧table.row(1)。同样,要获取索引,值对只需table.column(value).

于 2013-11-04T07:18:35.020 回答
1

也许您需要自己实现以实现此功能。

public class Param{
    private String key;
    private String value;
    public Param(String key, String value){
        this.key = key;
        this.value = value;
    }
    public void setKey(String key){
        this.key = key;
    }
    public String getKey(){
        return this.key;
    }

    public void setValue(String value){
        this.value = value;
    }
    public String getValue(){
        return this.value;
    }
}

Enumeration hs = request.getParameterNames();
List<Param> list = new ArrayList<Param>();
while (hs.hasMoreElements()) {
    String key = hs.nextElement();
    list.add(new Param(key, request.getParameter(key)));
}

通过这样做,您可以使用 List API 提供的索引获取参数。

于 2013-11-04T07:10:52.743 回答
1

java中没有Collection,将支持这一点。您需要创建一个继承 HashMap 的新类 IndexedMap 并通过覆盖 put 方法将键对象存储到 arraylist 中。

这是答案(由另一位用户回答:Adriaan Koster)

如何在不迭代的情况下从哈希映射中获取一个条目

于 2013-11-04T06:16:00.843 回答