我应该在java中使用哪种数据结构来存储重复值?

时间:2010-12-14 15:40:54

标签: java data-structures

哪个是在java中存储重复值的最佳数据结构?从中检索价值是多么容易!?

感谢 编辑#1 我正在读取1000个文件中的内容,我想将每个文件内容作为标记放在某些数据结构中。我使用了Hashtable,但是当我这样做时,我无法查看很多单词。这就是为什么我想要一个可以存储重复值的数据结构。

5 个答案:

答案 0 :(得分:2)

对于仅存储简单值,您应该使用List<E>接口的实现。

要从List<E>获取数据,您可以执行以下操作:

list.get(index); // will get data at a given index
// or you can iterate over all of the items in the list
for(E item: list) {
    // use E
}

根据您的使用情况,ArrayList<E>LinkedList<E>可以满足您的需求。

另一个选项是Map<K, V>(它的实现HashMap)。这将允许您在唯一键下保存重复值。

您可以通过以下方式从Map<K,V>中获取值:

map.get(someKey); // will retrieve the value associated with a key
// or you can iterate through all of the entries in a map like so:
for(Entry<K,V> entry: map.entrySet()){
    // use entry
}

回复您的修改:

您可能希望使用Map<String, List<String>>,其中键是文件的名称,值是文件中单词的列表。

您的代码可能如下所示:

Map<String, List<String>> data = new HashMap<String, List<String>>();
for(File f: files) {
    List<String> words = new ArrayList<String();
    data.put(f.getName(), words);
    Scanner s = new Scanner(f);
    while(s.hasNext()) {
        words.add(s.next());
    }
}

在此片段的末尾,data将填充每个文件中的字词列表。

答案 1 :(得分:0)

缺乏正确回答此问题的信息..但无论如何,哈希映射可以解决问题。值的检索可以在平均的恒定时间内完成。

答案 2 :(得分:0)

您应该使用List<E>,但应该实施int[] getDuplicateValuesIndexes(String value)方法和int getCount(String value)。这些将非常有用,因为在List<E>实现中,没有什么可以处理重复值,因为它们只存储任何类型的值。

答案 3 :(得分:0)

任何未实现Set接口的java.util.Collection。可能你会想要一些实现List的东西。

答案 4 :(得分:0)

使用数组来获取价值使用指数(我知道其答案不完整,但问题也是如此)