我有以下代码,一个带有水果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]
答案 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(' ');
}
}