2017-02-26 11 views
-5
List subitemsCategory=new ArrayList(); //Creating the subList 
subitemsCategory.add("Garnier");  //Adding sublist 
subitemsCategory.add("Bajaj"); 
List items=new ArrayList();   //Creating Main List 
items.add("Shampoo"); 
items.add("Oil"); 
items.add(subitemsCategory);   //Adding a new List in items 
System.out.println(items);    //Print Collection within Collection 

コレクション内のコレクションはどのように印刷されますか?AbstractCollectionのtoString()はCollection内でJavaでコレクションを出力する方法は?

+3

パラメータを入力します。あなたはそれらを使うべきです。 (それもあなたの問題を理解するのに役立つでしょう) –

+0

ソースコードを見てください:http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/ util/AbstractCollection.java#l453これは 'append(e)'を呼び出します。ここで 'e'はリストの要素なので、基本的に' e.toString() 'を使います。 – Andreas

+0

sb.append(e == this? "(このコレクション)":e); //( "このコレクション")の目的は何ですか? –

答えて

1

からtoString再帰呼び出し。
JavaのtoStringメソッドは、リストであるかどうかにかかわらず、すべてのオブジェクトで呼び出すことができます。 [a, b, c]

3列"a""b""c"から成るリストは、このように印刷されます。
[は、次に要素、
前に印刷されたカンマ区切りのリストは
を印刷し]は、端部にあるれています。

要素自体がリストの場合はどうなりますか? そのtoString方法は、このように、実行されます。
[a, b, [c, d, e]]

あなたのケースでは:

Collection aCollection = //constructor call 
aCollection.add(aCollection); 

があります

[Shampoo, Oil, [Garnier, Bajaj]] 

は我々がやるとどうOPの別の質問... に続いてスタックオーバフローなどのエラーは発生しません。 単純に印刷されます:

[..., (this Collection), ...] 

これは、三項演算子の使用目的であるin the source codeです。

+0

sb.append(e == this? "(this Collection)":e); //「このコレクション」の役割は何ですか? –

+0

@SunnyAgrawal、あなたのコード内で 'items.add(items)'を実行した場合、あなたは;)同じコレクションへの無限の参照を避けることができます。 –

関連する問題