在我的应用程序中,我有一些带有唯一键的小表(文件)(其中大多数有两个或更多字段 - 组成键)。我想为每个小表创建一个类,并将数据加载到java集合中。该对象将读取文件并将数据加载到Java集合中。然后,我想通过键值从该集合中获取数据,以便我可以访问所有字段。我的问题是我应该使用哪个集合或者说哪个集合支持多个键?一个考试的链接会很好。提前致谢!哪个Java集合最适合这种情况
回答
不能完全确定你的多重键的意思。每个'表'你可以存储在一个集合和一个键/值对获取的类表示给我的HashMap。
user181533 - 也是如此。每个表中的HashMap,其中键是两个字段的组合。所以这将如下工作:在表上查询以获取所有行(对象)并构建查询列表,然后构建查询列表中的列表。然后迭代List以结束HashMap,是否正确?所以这一切都可以在构造器中完成。然后创建一个方法,该方法接受关键字的参数并从HasMap返回表格对象。由于我是新手,所以如果我的理解不正确,请纠正我。谢谢, – Peter 2012-03-24 04:26:44
user181533我会与你的答案和偏离当然谁拥有HashMap,但希望你确认我的方法来创建和检索HashMap是正确的。谢谢@Louis – Peter 2012-03-24 12:38:41
假设我正确地读你的问题(有关于“多重键”有些含糊不清),你想要的是定义一个类包含多个领域,并以这样的方式将实现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();
}
}
谢谢JIm。我想创建一个对象列表,其中整个表加载到列表中。然后创建一个以FLD1和FLD2为参数的getter方法,并返回其中FLD1和FLD2与列表中的对象匹配的Object。只需迭代器或For循环遍历列表。但我不确定这是否是正确的做法。 – Peter 2012-03-24 01:58:46
Jim,如果我创建一个对文件运行查询并将数据(所有对象)加载到列表中的类。该类将有一个方法,它将FLD1和FLD2作为参数并返回匹配的实体(对象)。因此,无论何时创建该类的实例,它都会将数据加载到列表中。我一直在想这个列表,因为我对此很熟悉。这是正确的做法还是采取另一种方法。我对Java很陌生,这就是为什么要确保。谢谢。 Peter @JimGarrison – Peter 2012-03-24 02:26:45
一个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。
谢谢,将与此同时。基本上,我将通过查询从大型机读取我的表,建立查询列表,然后从查询列表中为每个实体创建Hashtable。再次感谢! – Peter 2012-03-24 04:02:24
为什么你可能会使用'Hashtable'而不是'HashMap'和'Iterator'?这不是Java 1.2。 – 2012-03-24 10:58:32
- 1. Java - 哪种集合在性能方面最适合这种情况?
- 2. NSMutableArray或NSMutableDictionary:哪种情况最适合这种情况?
- 3. MYSQL innodb或myisam?哪一个最适合这种情况?
- 4. 哪个rpc /消息框架最适合这种情况?
- 5. 哪个进程最适合在这种情况下使用
- 6. 在这种情况下,哪种索引方式最合适?
- 7. 哪种SSO工具最适合这种情况?
- 8. 哪种设计模式最适合这种情况
- 9. 哪种算法适合情况分析?
- 10. 哪个webOS Enyo元素/组件适合这种情况?
- 11. PostgreSQL:哪种数据类型更适合这种情况?
- 12. 在这种情况下,哪种设计模式适合账单?
- 13. 哪种设计模式适合这种情况?
- 14. 哪种方法更适合这种情况?
- 15. 哪种数据类型适合存储这种情况?
- 16. 哪种异常最适合“你不应该在这种情况下运行这种方法”的情况?
- 17. 是否适合这种情况的PriorityQueue?
- 18. MySQL InnoDB适合这种情况吗?
- 19. 会很适合这种情况?
- 20. 这种情况是否适合$ q?
- 21. couchdb适合这种情况吗?
- 22. 在这种情况下应该使用哪个集合?
- 23. YAML vs GPB vs JSON vs XML,哪种情况最适合?
- 24. 哪种映射API最适合我的情况?
- 25. 以“合并”这种情况
- 26. 什么线程安全的收集适合这种情况?
- 27. 什么是最适合这种情况的android异常?
- 28. 这种情况下最适合的语言/技术是什么?
- 29. 这种情况下最适合的认证技术是什么?
- 30. 什么是Javascript框架最适合这种情况?
不太清楚你的意思是多个键。你能提供一个例子吗? – 2012-03-24 01:32:00
例如,数据记录包含十个字段,但前两个字段(如Fld1和Fld2)使该记录具有唯一性。因此,要从java集合中存储和提取数据记录,这两个关键字段应该匹配。像查询其中xyz.FLD1 =“AA”和xyz.FLD2 =“123”。 – Peter 2012-03-24 01:40:42