日期:2014-05-20  浏览次数:20718 次

编译文件时出现了未经检查或不安全的操作,具体是怎么回事?
package wyf;
import java.util.*;
class  RandomAccessElementArrayListFasterThanLinkedList
{
public static void main(String[] args) 
{
long[] timeBegin = new long[2];
long[] timeEnd = new long[2];
Integer[] ia = new Integer[5000];
for (int i = 0; i < 5000; i++)
{
ia[i] = i;
}
int tempi;
Random r = new Random();
List list = new ArrayList(Arrays.asList(ia));
timeBegin[0] = System.currentTimeMillis();
for (int i = 0; i < 100000; i++)
{
tempi = (Integer)list.get(r.nextInt(5000));
}
timeEnd[0] = System.currentTimeMillis();
list = new LinkedList(Arrays.asList(ia));
timeBegin[1] = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++)
{
tempi = (Integer)list.get(r.nextInt(5000));
}
timeEnd[1] = System.currentTimeMillis();
}
}

注意:compare.java使用了未经检查或不安全的操作。  
注意:有关详细信息, 请使用 -Xlint:unchecked 重新编译。  

百度了,知道是在编译此java源文件时,如果你的jdk是1.5或者以上,会出现“使用了未经检查或不安全的操作;请使用 -Xlint:unchecked 重新编译。”这样的警告,原因是JDK 1.5中集合类的实例创建方式与JDK 1.4的有一些不同,JDK 1.5 里面引入很多新的特性。
问下这具体是哪里出现了问题,应该怎么改
jdk

------解决方案--------------------
就是你没有用泛型!1.5后,容器类都重写了,支持泛型。
------解决方案--------------------
加上泛型就补报错了:

class  RandomAccessElementArrayListFasterThanLinkedList{
    public static void main(String[] args){
        long[] timeBegin = new long[2];
        long[] timeEnd = new long[2];
        Integer[] ia = new Integer[5000];
        for (int i = 0; i < 5000; i++){
            ia[i] = i;
        }
        int tempi;
        Random r = new Random();
        //List list = new ArrayList(Arrays.asList(ia));
        List<Integer> list = new ArrayList<Integer>(Arrays.asList(ia));//使用泛型
timeBegin[0] = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++){
            tempi = list.get(r.nextInt(5000));//使用了泛型,不需要强制转换.
        }
        timeEnd[0] = System.currentTimeMillis();
        //list = new LinkedList(Arrays.asList(ia));
        list = new LinkedList<Integer>(Arrays.asList(ia));//使用泛型
timeBegin[1] = System.currentTimeMillis();
        for (int i = 0; i < 1000000; i++){