0

私は次のコード、果物の配列リストを持つツリーマップを持っています。removeAndAdd 関数で、[apple,orange] を削除してコンテナ 2 の bList に追加したいのですが、追加の括弧 [] が表示されてしまいました。私の方法は正しいですか?

public class TreeMapEx {

  private TreeMap<Integer, List<String>> tMap = new TreeMap<Integer, List<String>>();
  private List<String> aList = new ArrayList<String>();
  private List<String> bList = new ArrayList<String>();
    public static void main(String[] args) {
       TreeMapEx tm = new TreeMapEx();
        tm.addToTree();
        tm.addToList(1);
        tm.showItem(1);       
        tm.showItem(2);
        tm.removeAndAdd(1);
        tm.showItem(2);

    }

    private void addToTree() {
        tMap.put(1, aList);        
        bList.add("dragonfruit");
        tMap.put(2, bList);

    }

    private void addToList(int item) {
        if (tMap.containsKey(item)) {
            aList = new ArrayList<String>();
            aList.add("apple");
            aList.add("orange");
            tMap.put(item, aList);
            System.out.println(item + " added");
        } else {
            System.out.println(item + " not found");
        }
    }

    private void showItem(int item){

        System.out.println(item+" contain " + tMap.get(item));
    }

      private void removeAndAdd(int item){
          if (tMap.containsKey(item) && tMap.containsValue(aList)) {
          //remove everything from 1 and add to 2
           aList = new ArrayList<String>();
             List<String> temp;
             temp = tMap.get(item);

             bList.add(temp.toString());
          }         
    }

}

Output:
1 added
1 contain [apple, orange]
2 contain [dragonfruit]
2 contain [dragonfruit, [apple, orange]]

コンテナ2の【リンゴ、オレンジ】の追加ブラケットの取り外し方。

このようなものに

1 added
1 contain [apple, orange]
2 contain [dragonfruit]
2 contain [dragonfruit,apple, orange]
4

1 に答える 1

2

メソッドshowItemで次のコードが使用されているため、[apple, orange] の追加ブラケットが印刷されます。

System.out.println(item+" を含む " + tMap.get(item));

次のコードを使用して List の要素を出力することと同じです。

System.out.println(item+" contains " + tMap.get(item).toString() );

注: tMap.get(item) は List タイプ (List) です。

括弧を追加せずに要素を表示したい場合。次のコードを使用できます。

    private void showItem(int item){
        System.out.println(item+" contain ");
        for(String str:tMap.get(item) )
        {
            System.out.println( str);
        }
    } 

さらに、もう 1 つ正しく使用されていません。メソッドremoveAndAddを参照してください。

bList.add(temp.toString())を変更します。bList.addAll(temp)へ ;

bList.add(temp.toString()) を使用すると、[apple, orange] を持つ List 要素が文字列として bList に追加されます。本当は、リンゴとオレンジを別々に入れたいと思っています。bList.addAll(temp)を使用します。

リスト印刷などのコレクションの理由を確認するには、追加のブラケットが追加されています。toString メソッドをオーバーライドするjava.util.AbstractCollectionのソースコードを参照してください。コードは次のとおりです。

public String toString() {
    Iterator<E> it = iterator();
    if (! it.hasNext())
        return "[]";

    StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
        E e = it.next();
        sb.append(e == this ? "(this Collection)" : e);
        if (! it.hasNext())
            return sb.append(']').toString();
        sb.append(',').append(' ');
    }
}
于 2013-10-27T05:21:45.410 に答える