2012-03-24 83 views
2

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

+0

不太清楚你的意思是多个键。你能提供一个例子吗? – 2012-03-24 01:32:00

+0

例如,数据记录包含十个字段,但前两个字段(如Fld1和Fld2)使该记录具有唯一性。因此,要从java集合中存储和提取数据记录,这两个关键字段应该匹配。像查询其中xyz.FLD1 =“AA”和xyz.FLD2 =“123”。 – Peter 2012-03-24 01:40:42

回答

2

不能完全确定你的多重键的意思。每个'表'你可以存储在一个集合和一个键/值对获取的类表示给我的HashMap。

+0

user181533 - 也是如此。每个表中的HashMap,其中键是两个字段的组合。所以这将如下工作:在表上查询以获取所有行(对象)并构建查询列表,然后构建查询列表中的列表。然后迭代List以结束HashMap,是否正确?所以这一切都可以在构造器中完成。然后创建一个方法,该方法接受关键字的参数并从HasMap返回表格对象。由于我是新手,所以如果我的理解不正确,请纠正我。谢谢, – Peter 2012-03-24 04:26:44

+0

user181533我会与你的答案和偏离当然谁拥有HashMap,但希望你确认我的方法来创建和检索HashMap是正确的。谢谢@Louis – Peter 2012-03-24 12:38:41

4

假设我正确地读你的问题(有关于“多重键”有些含糊不清),你想要的是定义一个类包含多个领域,并以这样的方式将实现equals()hashCode()密钥本身对象可以用作HashMap键。

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

public class MyKey 
{ 
    private String part1 = null; 
    private Integer part2 = null; 
    public MyKey(String part1, int part2) 
    { 
     this.part1 = part1; 
     this.part2 = part2; 
    } 

    @Override 
    public boolean equals(Object o) 
    { 
     if (o == null || !(o instanceof MyKey)) return false; 
     return this.part1.equals(((MyKey)o).part1) && this.part2.equals(((MyKey)o).part2); 
    } 

    @Override 
    public int hashCode() 
    { 
     return this.part1.hashCode() + this.part2.hashCode(); 
    } 
} 
+0

谢谢JIm。我想创建一个对象列表,其中整个表加载到列表中。然后创建一个以FLD1和FLD2为参数的getter方法,并返回其中FLD1和FLD2与列表中的对象匹配的Object。只需迭代器或For循环遍历列表。但我不确定这是否是正确的做法。 – Peter 2012-03-24 01:58:46

+0

Jim,如果我创建一个对文件运行查询并将数据(所有对象)加载到列表中的类。该类将有一个方法,它将FLD1和FLD2作为参数并返回匹配的实体(对象)。因此,无论何时创建该类的实例,它都会将数据加载到列表中。我一直在想这个列表,因为我对此很熟悉。这是正确的做法还是采取另一种方法。我对Java很陌生,这就是为什么要确保。谢谢。 Peter @JimGarrison – Peter 2012-03-24 02:26:45

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。

+0

谢谢,将与此同时。基本上,我将通过查询从大型机读取我的表,建立查询列表,然后从查询列表中为每个实体创建Hashtable。再次感谢! – Peter 2012-03-24 04:02:24

+0

为什么你可能会使用'Hashtable'而不是'HashMap'和'Iterator'?这不是Java 1.2。 – 2012-03-24 10:58:32

相关问题