我遇到了TreeSet(sortedNodes)和ArrayList(nodes)的奇怪问题.在我的程序中,我有一个从Event Dispatch Thread(from ActionListener)这些行调用的方法:
System.out.println("nodes: "+nodes.size());
sortedNodes.addAll(nodes);
System.out.println("sortedNodes: "+sortedNodes.size());
Run Code Online (Sandbox Code Playgroud)
问题是,在某些集合上sortedNodes.size()返回的数字低于nodes.size()(在这3行上,因此内容没有变化nodes).当我打印内容时sortedNodes,除了不包含它应该包含的所有对象之外,它甚至没有排序.奇怪的是 - 如果我再次调用整个方法,它就解决了这个问题.我没有得到它 - 在相同的集合上执行相同的代码,但第一次它不起作用,第二次它没有.有任何想法吗?
编辑:如果我的问题不是很清楚,这应该有所帮助
exportTree();
exportTree();
Run Code Online (Sandbox Code Playgroud)
pritns on output this:
nodes: 7
sortedNodes: 4
b2[23,57]a[46,97]b[65,77]c[43,43]
nodes: 7
sortedNodes: 7
a[46,97]b[65,77]b1[55,89]b2[23,57]b3[20,20]c[43,43]c1[99,88]
Run Code Online (Sandbox Code Playgroud)
比较:
public class NodeComparator implements Comparator<Node>{
public int compare(Node o1, Node o2) {
return o1.getLabel().compareTo(o2.getLabel());
}
}
Run Code Online (Sandbox Code Playgroud)
节点:
public class Node {
private int order;
private String label;
private Integer[] keys;
private Node[] pointers;
private Node …Run Code Online (Sandbox Code Playgroud)