-1

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

我将从 db 调用中生成一个 K,V 集,但不知道每个集是什么。一些 K,V 将被处理,而另一些则不

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

然后基于第二个数组,我将处理调用 position[i] 所需的 K,V 集。

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

那么LinkedHashMap使用正确的类型吗?

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

任何代码示例都会很棒。

4

4 回答 4

1

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

我没有完全理解你的问题,但如果是“如何获取地图中键值映射的索引”,这是不可能的。您可以遍历地图并计算您在查找之前看到的键,但这当然是 O(n) 复杂度,而不是更快。

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

如果你把你的问题说得更清楚,也许我们可以提供一个更适合你的数据结构供你使用。

于 2012-05-18T11:24:21.367 回答
1

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

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

插入这样的结构将是O(n). 但是,听起来您只是在构建结构一次,然后没有对其进行修改。

最后,如果您不需要在给定键的情况下快速定位元素,您可以丢失Map并只使用ArrayList.

于 2012-05-18T11:32:20.600 回答
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();
    }
于 2012-05-18T11:16:50.597 回答
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();
}
于 2012-05-18T11:31:33.000 回答