Java Treemap和ArrayList传输项

时间:2013-10-27 04:57:09

标签: java arraylist treemap

我有以下代码,一个带有水果arraylist的Treemap。在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]

1 个答案:

答案 0 :(得分:2)

[apple,orange]的附加括号正在打印,因为以下代码用于方法 showItem

System.out.println(item +“contains”+ 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);
        }
    } 

此外,还有一件事没有正确使用。请参阅方法 removeAndAdd

更改 bList.add(temp.toString());到 bList.addAll(temp);

如果使用bList.add(temp.toString()),带有[apple,orange]的List元素将作为字符串添加到bList。实际上,你想单独添加苹果和橙色。使用 bList.addAll(temp);

要查看为什么要添加列表,例如列表打印附加括号。请参考 java.util.AbstractCollection 的源代码,覆盖toString方法。代码如下:

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(' ');
    }
}