大家请看注释处。
public class Test1 implements Comparable<Test1>{
static PriorityQueue<Test1> myT = new PriorityQueue<Test1>();
int i = 0;
public Test1(int i){
this.i = i;
myT.add(this);
}
public int compareTo(Test1 testA){
return this.i < testA.i ? -1 :
(this.i == testA.i ? 0 : 1);
}
public String toString(){
return "i = " + i;
}
public static void main(String[] args){
for(int i = 0; i < 4; i++){
new Test1(i);
}
System.out.println(myT.size());
int x = myT.size();
for(int i =0; i < x; i++){ //这里如果把 i<x 换成 myT.size()那么结果就只会出现2个(也就是少2个,现在这样是正常的)
System.out.println(myT.poll());
}
}
}
public class Test1 implements Comparable<Test1>{
static PriorityQueue<Test1> myT = new PriorityQueue<Test1>();
int i = 0;
public Test1(int i){
this.i = i;
myT.add(this);
}
public int compareTo(Test1 testA){
return this.i < testA.i ? -1 :
(this.i == testA.i ? 0 : 1);
}
public String toString(){
return "i = " + i;
}
public static void main(String[] args){
for(int i = 0; i < 4; i++){
new Test1(i);
}
System.out.println(myT.size());
int x = myT.size();
for(int i =0; i < x; i++){ //这里如果把 i<x 换成 myT.size()那么结果就只会出现2个(也就是少2个,现在这样是正常的)
System.out.println(myT.poll());
}
}
}
楼主应该多看API 不清楚就查下 以后这种问题你遇到的机会多了
poll()是出队列函数每poll一次队列中就会少一个对象 那么在第二次近如循环的时候myT.size()的值就少了一个二i的值是++的那么你不可能让所有的元素出队列
for(int i = 0 ; i < myT.size();;){
System.out.println(myT.poll());
}
or
while(myT.size > 0){
System.out.println(myT.poll());
}
如果你用 i<myT.size(), 执行两次以后,i=2,myT做了两次出队列,所以myT.size()也就为2,所以这个循环也就只执行两次
第二个表达式是循环继续的条件表达式;
第三个表达式是迭代控制表达式;
for(int i =0; i < myT.size(); i++){
}
这段代码中初夏典型循环混乱问题:
在循环的过程中循环体会改变循环条件表达式的条件!类似这样的循环:
int j=10;
for(int i=0;i<j;i++){
....................
j++;
}
因为在每次循环开始时表达式二都会被计算一遍,所以循环可能会失去控制,出现不可预知的结果