2

我面临一个问题。我使用以下哈希图来存储一些值

HashMap<String, Object> hm = new HashMap<String, Object>();

对象是另一个 HashMap(是的,你可以说 HashMap 的 HashMap)。String 用于存储书名,Object 又是另一个 hashmap,用于存储作者姓名和作者数量。所以它看起来像( Xyz book{authname,numberOfAuthors} )。现在我想将此哈希图打印为 NxN 矩阵。我可以使用任何默认功能吗?如果没有,那么任何人都可以告诉我任何提示以简单的方式做到这一点?因为我不想使用这么多循环和 if 条件(它会杀死系统)。

谢谢!

4

2 回答 2

3

看起来您未充分利用 OO 潜力...您可以创建自己的Book类并覆盖toString()以打印所有字段...

public class Book{
    private String bookName;
    private String authorName;
    ...
    @Override
    public String toString() {
        return String.format("%s written by %s",bookName,authorName);
    }
}

通过这种方式,您的库将类似于:

Map<String, Book> myLibrary = new HashMap<String, Book>(...);

并打印所有库,您将需要一个简单的循环:

    for(Book b : myLibrary.values()) {
        System.out.println(b);
    }
于 2010-01-13T03:38:03.647 回答
2

绝对没有内置函数可以做到这一点。

您需要做的第一件事是找出二级映射中的唯一键并将它们分配给列。也许您已经知道它们(如果它们是固定的),否则您必须遍历所有它们一次并将它们收集在一个集合中。

如果确实有固定键,则应考虑消除二级映射,并为此使用 Java bean 类(书籍)。

如果你真的要打印矩阵,你需要考虑格式化,主要是列宽。同样,这也可以先验地固定,或者您可以查看数据(全部或样本)来弄清楚。

暂时忽略格式,您可以通过循环遍历地图(理想情况下按排序键顺序)输出类似 CSV 的内容,并为每个条目(书)输出一行。然后,在每一行中,您将遍历列(键列表)并输出每个字段。

于 2010-01-13T01:16:07.503 回答