哪个Java集合最适合此场景

哪个Java集合最适合此场景,java,Java,在我的应用程序中,我有一些带有唯一键的小表(文件)(大多数表(文件)有两个或更多由feild组成的键)。我想为每个小表创建一个类,并将数据加载到java集合中。此对象将读取文件并将数据加载到java集合中。然后,我希望通过键值从该集合中获取数据,以便能够访问所有字段。我的问题是应该使用哪个集合,或者说哪个集合支持多个键?链接到examole将非常好。提前谢谢 假设我正确地阅读了您的问题(关于“多个键”有些含糊不清),那么您需要为键本身定义一个类,该类包含多个字段,并实现equals()和hash

在我的应用程序中,我有一些带有唯一键的小表(文件)(大多数表(文件)有两个或更多由feild组成的键)。我想为每个小表创建一个类,并将数据加载到java集合中。此对象将读取文件并将数据加载到java集合中。然后,我希望通过键值从该集合中获取数据,以便能够访问所有字段。我的问题是应该使用哪个集合,或者说哪个集合支持多个键?链接到examole将非常好。提前谢谢

假设我正确地阅读了您的问题(关于“多个键”有些含糊不清),那么您需要为键本身定义一个类,该类包含多个字段,并实现
equals()
hashCode()
,以便对象可以用作
HashMap

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


不完全确定多个键是什么意思。每个“表”都有一个类,您可以将它存储在集合中,并使用键/值对进行获取,这对我来说就是HashMap。

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

我的建议是对每个表文件执行以下操作。在我的示例中,我假设您将表文件的每一行读入一个名为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);
  }
您可以添加任意数量的对象,只要每个对象都有唯一的键。哈希表支持添加和删除值等,因此使用起来非常简单


如果需要,还可以将哈希表转换为数组,如果需要获取哈希表的全部内容,还可以获取用于遍历每个条目的枚举数。

不太清楚多个键是什么意思。您能提供一个例子吗?例如,一个数据记录包含十个字段,但前两个字段(如Fld1和Fld2)使该记录唯一。因此,要从java集合中存储和提取数据记录,这两个关键字段应该匹配。就像查询xyz.FLD1=“AA”和xyz.FLD2=“123”一样。谢谢JIm。我想创建一个对象列表,将整个表加载到该列表中。然后创建一个getter方法,该方法将FLD1和FLD2作为参数,并返回FLD1和FLD2在列表中的对象上匹配的对象。只需对列表进行迭代器或For循环。但是我不确定这样做是否正确。Jim,如果我创建一个类,在文件上运行查询并将数据(所有对象)加载到列表中。该类将有一个方法,该方法将FLD1和FLD2作为参数,并返回匹配的实体(对象)。因此,无论何时创建该类的实例,它都会将数据加载到列表中。我一直在想这个列表,因为我对它有点熟悉。这是正确的方法还是应该采取另一种方法。我是Java新手,这就是为什么我想确定。谢谢Peter@JimGarrisonThanks会同意的。基本上,我将通过查询从大型机读取我的表,构建一个查询列表,然后从querylist为每个实体创建哈希表。再次感谢!为什么您可能会使用
哈希表
而不是
哈希映射
迭代器
?这不是Java1.2.user181533——这也是事实。每个表的哈希映射,其中键是两个字段的组合。所以它的工作原理是这样的:查询表以获取所有行(对象),然后构建一个querylist,然后从querylist中生成一个列表。然后在列表上迭代以生成哈希映射,对吗?所以这一切都可以在constructor中完成。然后创建一个方法,该方法接受key的参数并从HasMap返回表对象。因为我是新手,所以如果我的理解不正确,请纠正我。谢谢,用户181533我同意你的答案,也不同意任何人提出的HashMap,但希望你确认我创建和检索HashMap的方法是否正确。谢谢@Louis
// 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 + ...);