哪种Java Collection最适合此场景

时间:2012-03-24 01:28:11

标签: java

在我的应用程序中,我有一些带有唯一键的小表(文件)(其中大多数都有两个或多个组合键 - 组合键)。我想为每个小表创建一个类,并将数据加载到java集合中。该对象将读取文件并将数据加载到java集合中。然后我想通过键值从这个集合中获取数据,这样我就可以访问所有字段。我的问题是我应该使用哪个集合或说哪个集合支持多个密钥?一个指向考试的链接会很棒。提前致谢!

3 个答案:

答案 0 :(得分:4)

假设我已正确阅读了您的问题(对于“多个密钥”存在一些歧义),您想要的是为密钥本身定义一个类,其中包含多个字段并实现equals()和{{1}以这种方式将对象用作hashCode()键。

这是一个非常简单的框架实现(未经过测试,省略了一些错误处理):

HashMap

答案 1 :(得分:2)

不完全确定多个键的含义。每个“表”的类,你可以存储在一个集合中,并使用一个键/值对来获取HashMap给我。

答案 2 :(得分:1)

Hashtable可能最适合存储每个表的内容。 Hashtable基本上允许您添加任意数量的对象,每个对象都有一个唯一的密钥。

我的建议是为每个表文件执行以下操作。在我的示例中,我假设您将表文件的每一行读入一个名为Entry ...的对象

// Create a new Hashtable, where the contents will be a String (the unique key) and an "Entry" object for the table row of data
Hashtable<String,Entry> entriesTable = new Hashtable<String,Entry>();

for (each line in your table file){
  // Generate the unique value for this row. If there are multiple columns that make up the key,
  // just join them together into a single String
  String key = uniqueColumn1 + uniqueColumn2 + ...;

  // Create an object for your row, if you dont have one already.
  Entry row = new Entry(line);

  // Add the entry to the Hashtable
  entriesTable.put(key,row);
  }

如果您想从表中获取一行,您可以通过其独特的价值来询问它......

Entry entry = entriesTable.get(uniqueColumn1 + uniqueColumn2 + ...);

您可以添加任意数量的对象,前提是每个对象都有唯一的密钥。 Hashtable支持添加和删除值等,因此非常容易使用。

如果需要,您还可以将Hashtable转换为数组,如果需要获取Hashtable的全部内容,则可以获取用于遍历每个条目的Enumerator。