2010-12-14 175 views
0

这是在java中存储重复值的最佳数据结构?从它检索价值是多么容易!我应该在java中使用哪种数据结构来存储重复值?

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

+6

你是什么意思的“重复值?”什么数据被存储?您需要对这些值执行哪些操作?没有更多的信息,这是无法回答的。 – syrion 2010-12-14 15:42:40

+0

你需要重复的值还是重复的参考?换句话说,您是否有多个包含相同内容的对象,或者您是否需要对同一对象进行多次引用? – 2010-12-14 15:55:17

+0

有什么内容?号码?你希望以后如何访问这些内容? – 2010-12-14 19:27:08

回答

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()); 
    } 
} 

在这个snipit结束,data将与每个文件中的单词列表来填补。

+0

以及我需要检查数据结构中的值,所以我该怎么做!?其实我正在使用散列表,我认为它正在跳过一些值,尽管我使用的是独特的密钥。 – Maverick 2010-12-14 16:02:29

+0

@mad究竟是什么 - “我需要检查数据结构中的值”是什么意思? – jjnguy 2010-12-14 16:03:19

+0

@mad,你的意思是你需要看看这个值是否在结构中? – jjnguy 2010-12-14 16:08:24

0

theres缺乏信息正确回答这个qn ..但无论如何,hashmaps可以做的伎俩。检索值可以在平均时间内完成..

+0

在HashMap中重复值?只有当他们有独特的钥匙时,这似乎极不可能。 – GaryF 2010-12-14 15:47:56

+0

或者用键值作为重复计数器的值。 – enguerran 2010-12-14 15:49:21

+0

它可能生成唯一的密钥。但是,显然mad_programmer正在使用散列表,即使使用唯一的键也不适合他。 – 2010-12-14 16:24:17

0

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

0

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

0

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

相关问题