永发信息网

java容器问题

答案:3  悬赏:0  手机版
解决时间 2021-08-20 13:36
  • 提问者网友:缘字诀
  • 2021-08-20 06:21

import java.util.*;
class ArrayListTest{
public static void printElements(Collection d){
Iterator it =d.iterator();
while(it.hasNext()){
System.out.println(it);
}
}
public static void main(String[] args){
Student s1=new Student(1,"zhangsan");
Student s2=new Student(4,"lisi");
Student s3=new Student(3,"wangwu");
ArrayList x=new ArrayList();
x.add(s1);
x.add(s2);
x.add(s3);
Collections.sort(x);
printElements(x);
}
}

class Student implements Comparable{
int num;
String name;
Student(int num,String name){
this.num=num;
this.name=name;
}
public int compareTo(Object o){
Student s=(Student)o;
return num>s.num ? 1: (num==s.num ? 0 : -1);
}
public String toString(){
return num+":"+name;
}
}

报一个注意。为什么?

最佳答案
  • 五星知识达人网友:刀戟声无边
  • 2021-08-20 06:35

不清楚您所说的报一个注意指的是什么,但看您的程序,printElements方法会导致死循环:


while(it.hasNext()){
System.out.println(it);
}


因为这样的话it永远指在原地,出不了while循环。需要改成


while(it.hasNext()){
System.out.println(it.next()); // 或是System.out.println(it.next().toString()); 如果您需要的是可读的输出。
}

全部回答
  • 1楼网友:西岸风
  • 2021-08-20 07:56

没有使用泛型设计,你现在的编译器,也就是jdk应该是5.0以上,要求所有容器类,需要提供容器内所装载的对象类型,也就是List<M>中M表示List装的都是M类型的实例,就如你这个程序,应该是ArrayList<Student>,如果没有明确指明List中装载的对象,Java将默认为装的都是Object类型的对象,此时就会出现注意事项,因为对于编译器来说,无法检查你放到List里面究竟是什么对象,这样当程序中放入了一个其他类型对象时候,编译能通过,但是运行时就出现错误。

这是jdk5新加入的功能,如果想不提示注意,就可以将编译器的级别调整为jdk4或者在程序得上方加入注释

@SuppressWarnings("unchecked"),这样就不会有注意了,但同时,你也丧失了用jdk5泛型来检查容器存储类型是否安全的功能。

  • 2楼网友:渡鹤影
  • 2021-08-20 07:26

可能你用的jdk是5.0以上的,要是这样警告来自ArrayList x=new ArrayList();没有定义成泛型

ArrayList<Student > x=new ArrayList<Student >();

还有你就是楼上的问题。不能跳出循环,这个编译不会产生警告,只是运行会死循环。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯