我正在为Java寻找类似于Table的数据结构。到目前为止,我还没有找到一个,这真的很令人沮丧,因为我肯定肯定会有一个。请注意,这与表格的图形表示无关,只与逻辑模型有关。
这个想法很简单,你有一个像这样的表:
+-------+-----+-----------+
| Name | Age | city |
+-------+-----+-----------+
| Steve | 21 | London |
| John | 40 | Amsterdam |
+-------+-----+-----------+
现在我需要迭代不同的行并根据列名检索值。它必须是灵活的,所以我不知道前面的列名(所以豆类列表不是一个选项)。我能找到的具有此功能的最佳结构是 java.sql.ResultSet ,但我不习惯在非SQL相关的上下文中使用它。我也不想要一个HashMaps列表,因为这意味着存储每行的密钥,效率非常低。
这似乎是一个基本的结构,但由于在Java中搜索类似结构的表格时,大量的GUI相关帖子,我找不到任何关于它的内容。
修改
对于我需要的具体示例,以下代码:
TableStructure table = getTable(); // Gets my desired table with its filling
while (table.next()){
System.out.println("Name: " + table.get("Name"));
System.out.println("Age: " + table.get("Age"));
System.out.println("City: " + table.get("City"));
System.out.println("NonExistent: " + table.get("NonExistent"));
}
应该产生以下输出:
Name: Steve
Age: 21
City: London
NonExistent: null
Name: John
Age: 40
City: Amsterdam
NonExistent: null
答案 0 :(得分:2)
ResultSet
是元组的列表(或一组,取决于排序的必要性和元素的多样性),因此真的通用答案将是
class TableStructure<Tuple>
{
List<Tuple> tuples;
Iterator iterator;
public Tuple next()
{
if ( iterator == null ) { iterator = tuples.iterator(); /* NPE prone */ }
return iterator.next()
}
}
(或更好,让TableStructure
扩展List
并直接使用迭代器)
,其中
class Tuple { Map<String,Object> attributes; }
此构造允许表格中的不同行大小,这在DB设置中违反了第一个(或第二个?)正常形式原则。
希望有所帮助。
干杯,
答案 1 :(得分:0)
List<Map<String, ?>>
怎么样?对于具体实现,您可以使用ArrayList<HashMap<String, Object>>
。