2

私は問題に直面しています。次のハッシュマップを使用して、いくつかの値を保存しました

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

オブジェクトは別の HashMap です (そうです、HashMap の HashMap と言えます)。String は本の名前を格納するためのもので、Object は著者名と著者の数を格納するための別のハッシュマップです。したがって、( Xyz book{authname,numberOfAuthors} ) のようになります。このハッシュマップを NxN 行列として出力したいと思います。これに使用できるデフォルトの機能はありますか?いいえの場合、誰かが簡単な方法でそれを行うためのヒントを教えてもらえますか? あまりにも多くのループと if 条件を使用したくないため (システムが強制終了されます)。

ありがとう!

4

2 に答える 2

3

オブジェクト指向の可能性を十分に活用していないようです...独自の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

これを行うための組み込み関数は絶対にありません。

最初に行う必要があるのは、第2レベルのマップで一意のキーを見つけ出し、それらを列に割り当てることです。おそらくあなたはすでにそれらを知っています(それらが修正されている場合)、そうでなければあなたはそれらすべてを一度ループしてセットにそれらを集める必要があります。

固定キーがある場合は、第2レベルのマップを削除し、これにJava Beanクラスを使用することを検討する必要があります(本)。

実際にマトリックスを印刷する場合は、フォーマット、主に列幅について考える必要があります。繰り返しになりますが、これは事前に修正することもできます。または、データ(すべてまたはサンプル)を調べて把握することもできます。

しばらくフォーマットを無視すると、マップをループして(理想的にはソートされたキー順で)CSVのようなものを出力し、エントリ(本)ごとに1行を出力できます。次に、各行で、列(キーリスト)をループして、各フィールドを出力します。

于 2010-01-13T01:16:07.503 に答える