带有索引,键和值的Java Collection

时间:2013-11-04 06:03:25

标签: java collections

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

我有以下内容:

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

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

编辑1

我想条件检查索引(位置)是否为x,然后获取相应的键和值对,并构造一个带查询的字符串。

3 个答案:

答案 0 :(得分:3)

正如其他人所说,Java集合不支持这一点。解决方法是Map<R, Map<C, V>>。但它太难看了。 您可以使用 Guava 。它提供 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)。同样,要获取 index,值对只需执行table.column(value)

答案 1 :(得分:1)

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

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

how to get the one entry from hashmap without iterating

答案 2 :(得分: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提供的索引获取参数。