在linkedhashmap中的<k,v =“”>的java位置</k,>

时间:2012-05-18 11:12:49

标签: java arrays linkedhashmap

我一直在搜索关于LinkedHashMap的所有帖子的几个小时,但我似乎错过了基础知识。

我将从db调用生成K,V集,但不知道每个集合将是什么。某些K,V将被处理,而其他则不会

我需要迭代地图,得到位置(indexOf [i] ??)+ K(String)。 然后将传递给另一个方法,询问如何处理该K(放入第二个数组)

基于第二个数组,我将处理所需的K,V组调用位置[i]。

即 1)轮询db for info,记录返回如下 - abc txt - def blah - ghi blah - jkl txt 2)循环记录并询问第二个脚本该做什么 - 像这样的txt过程..... - 什么都不做 - 保存indexOf以便快速推荐,因为K可能会改变值。 - 如果需要,更改K,V(更正拼写错误,删除空格,strtolower等) 3)根据需要进一步处理调用indexOf(K可能已如上所述改变)

LinkedHashMap使用的是正确的类型吗?

从PHP的角度来看似乎很容易,所以我必须对此有点厚。

任何代码示例都会很棒。

4 个答案:

答案 0 :(得分:1)

Java中的地图不支持为每个键值映射分配索引的概念。即使对于LinkedHashMap也是如此,它具有迭代顺序可预测的唯一优势。

我没有完全理解你的问题,但是如果它是&#34;我怎样才能在地图中获得键值映射的索引&#34;,这不是直接可能的。您可以遍历地图并计算在查找之前看到的键,但当然这是O(n)复杂度而不是更快。

在PHP中,这是不同的,因为默认数据结构有一些数组/列表和映射的组合,而在Java中这些是不同的数据结构。

如果您使问题更清楚,也许我们可以提供更适合您使用的数据结构。

答案 1 :(得分:1)

听起来你需要能够通过键和位置有效地找到结构中的元素。

使用标准Java容器实现此目的的一种方法是将MapArrayList结合使用(两者都存储对相同对象的引用)。前者可以通过密钥快速查找;后者,按职位。

插入这样的结构将是O(n)。但是,听起来你只需要构建一次结构,而不是之后修改它。

最后,如果您不需要快速找到给定密钥的元素,则可能会丢失Map并只使用ArrayList

答案 2 :(得分:0)

我的问题不明确,但我认为你在询问如何迭代地图。

您可以通过以下方式执行此操作:

    Map<String, String> map = new HashMap<String, String>();
    map.put("key1", "value1");
    for (Entry<String, String> entry : map.entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();
    }

答案 3 :(得分:0)

我不确定你想做什么......

public void processDbResult(Map<K, V> map)
{
    // you got sth like this: 
    // Map<K, V> map = new LinkedHashMap<K, V>();
    for (Entry<K, V> entry : map.entrySet())
    {
        K key = entry.getKey();
        V value = entry.getValue();

        Object how = determine(key);

        process(how, entry);
    }
}

private void process(Object how, Entry<K, V> entry)
{
    // do something
}

private Object determine(K key)
{
    // determine processing steps
    return new Object();
}