1

可能重复:
类似于 java 数据结构的表

我正在为 Java 寻找类似表的数据结构。到目前为止,我还没有找到一个,这真的很令人沮丧,因为我知道肯定有一个。请注意,这与表格的图形表示无关,只是逻辑模型。

这个想法很简单,你有一个像这样的表:

+-------+-----+-----------+
| Name  | Age | city      |
+-------+-----+-----------+
| Steve | 21  | London    |
| John  | 40  | Amsterdam | 
+-------+-----+-----------+

现在我需要遍历不同的行并根据列名检索值。它必须灵活,所以我不知道前面的列名(所以不能选择 bean 列表)。我能找到的具有此功能的最佳结构是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
4

2 回答 2

2

AResultSet是元组的列表(或集合,取决于排序的必要性和元素的多样性),所以一个真正通用的答案是

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 设置中违反了第一个(或第二个?)范式原则。

希望有点帮助。

干杯,

于 2012-10-29T13:24:15.653 回答
0

一个List<Map<String, ?>>呢?对于具体的实现,您可以使用ArrayList<HashMap<String, Object>>.

于 2012-10-29T12:37:39.830 回答