为什么';t导入java.util.*是否包含数组和列表?

为什么';t导入java.util.*是否包含数组和列表?,java,import,Java,Import,我在Debian5上使用java java版本“1.6.0_20” Java(TM)SE运行时环境(build 1.6.0_20-b02) Java HotSpot(TM)客户端虚拟机(构建16.3-b01,混合模式,共享) 为什么以下两者之间存在差异 案例1: import java.util.*; 案例2: import java.util.*; import java.util.Arrays; import java.util.List; 为什么第一个案例不包括第二个案例 仅当我显式导

我在Debian5上使用java

java版本“1.6.0_20”
Java(TM)SE运行时环境(build 1.6.0_20-b02)
Java HotSpot(TM)客户端虚拟机(构建16.3-b01,混合模式,共享)

为什么以下两者之间存在差异

案例1:

import java.util.*;
案例2:

import java.util.*;
import java.util.Arrays;
import java.util.List;
为什么第一个案例不包括第二个案例

仅当我显式导入数组和列表时,代码才会编译

代码:

import java.util.*;
导入java.util.array;
导入java.util.List;
公开课考试{
公共静态void main(字符串[]args){
列表i=新的ArrayList(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
列表j=新的ArrayList();
ListIterator n=i.ListIterator(i.size());
while(n.hasPrevious()){
j、 添加(n.先前的());
}
println(j);
}
静态void println(对象o){
系统输出打印ln(o);
}
静态无效打印(对象o){
系统输出打印(o);
}
}
注释掉第2条和第3条导入语句时出现的错误如下:

nattyp@debian:~/dev/java$ javac Test.java
Test.java:7: cannot find symbol
symbol  : method asList(int,int,int,int,int,int,int,int,int,int)
location: class Arrays
                List<Integer> i = new ArrayList(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
                                                      ^
Note: Test.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
nattyp@debian:~/dev/java$
nattyp@debian:~/dev/java$javac Test.java
Test.java:7:找不到符号
符号:方法asList(int,int,int,int,int,int,int,int,int,int,int,int,int,int)
位置:类数组
列表i=新的ArrayList(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
^
注意:Test.java使用未经检查或不安全的操作。
注意:使用-Xlint重新编译:未选中以获取详细信息。
1错误
nattyp@debian:~/dev/java$
看看这个论坛。讨论了在向包中添加新类以及在不同的包中有两个同名的类只导入其中一个时,使用通配符如何导致冲突

更新

它给出了该警告,因为您的线路实际上应该是

List<Integer> i = new ArrayList<Integer>(Arrays.asList(0,1,2,3,4,5,6,7,8,9,10));
List<Integer> j = new ArrayList<Integer>();
List i=newarraylist(Arrays.asList(0,1,2,3,4,5,6,7,8,9,10));
列表j=新的ArrayList();

您需要为数组列表指定类型,否则编译器将发出该警告,因为它无法识别您正在以类型安全的方式使用该列表。

案例1应该有效。我看不出有什么不对劲。可能还有其他一些问题。我建议使用干净的构建。

我刚刚编译了它,它在没有隐式导入的情况下编译得很好,可能您看到的是过时的缓存或IDE中的某些东西

您是否尝试过从命令行编译

我有完全相同的版本:

可能你认为警告是错误的

更新

在您试图编译的目录中(可能是以前创建的)似乎有一个
Arrays.class
文件。这就是显式导入解决问题的原因。尝试将源代码复制到干净的新目录,然后重试。您将看到这次没有错误。或者,清理工作目录并删除
数组

import java.util.*;


当代码引用其他一些
列表
数组
(例如,在同一个包中,或通常也导入)时变得明显。在第一种情况下,编译器将假设在同一个包中声明的
数组是要使用的,在后一种情况下,因为它是专门声明的,所以将使用更具体的
java.util.Arrays

这并不能真正回答问题,不是吗?不太可能,但这是一个好信息。感谢您的快速响应。它给出了警告,因为您的行实际上应该是List i=new ArrayList(…);您需要指定数组列表的类型,否则编译器将给出该警告,因为它无法识别您正在以类型安全的方式使用该列表。我看到了警告,但当我注释掉第2条和第3条导入语句时,我得到了一个错误。我已经更新了帖子以显示实际的错误。这没有意义。您确定没有包含其他名为
数组的类吗?好的,我想我明白了。。。更新我的答案,就是这样。同一目录中有一个Arrays.class。谢谢。@nattyP我很高兴它有帮助。顺便说一句,你可以把这个答案标记为接受,这样下一个有同样问题的人就可以很快找到解决方案。
import java.util.*;
import java.util.*;
import java.util.List;
import java.util.Arrays;