单选题
编译运行下面的程序,结果如何?\nImport java.util.*;\npublic class MyCollection_2{\n public static void main(String[] args){\n HashSet s1 = new HashSet();\n addRange(s1, 1);\n ArrayList l1 = new ArrayList();\n addRange(l1, 2);\n TreeSet s2 = new TreeSet();\n addRange(s2, 3);\n LinkedList l2 = new LinkedList();\n addRange(s2, 5);\n s1.removeAll(11);\n l1.addAll(s2);\n l2.addAll(l1);\n s1.removeAll(l2);\n System.out.println(s1);\n }\n static void addRange(Collection col, int step){\n for(int i=step*2; i<=25; i+=step){\n col.add(new Integer(i));\n }\n }\n}
A
该程序不能编译,因为这些操作在不兼容的集合上实现
B
不能编译,因为在对s2表示的TreeSet元素进行排序时没有给与其可用的Comparetor
C
可以正确编译,但运行时会抛出UnSupportedOperationException
D
可以正确编译,并打印初所有25以下的素数
答案解析
正确答案:A
解析:
这段代码有几个关键点需要分析:
addRange 方法用于向集合中添加一系列的整数值。
addRange(s2, 5); 这行代码尝试向 TreeSet 对象 s2 添加值,之后又试图向 s2 添加值,但是参数是 LinkedList l2。这里存在逻辑上的混乱,应该是向某个集合添加值,而不是重复使用 s2。
removeAll 方法用于从一个集合中移除另一个集合中存在的元素。
让我们逐步分析代码中的问题:
addRange(s1, 1); 向 HashSet s1 添加从2开始(1*2)到25步长为1的所有整数。
addRange(l1, 2); 向 ArrayList l1 添加从4开始(2*2)到25步长为2的所有整数。
addRange(s2, 3); 向 TreeSet s2 添加从6开始(3*2)到25步长为3的所有整数。
addRange(s2, 5); 这一行可能是个错误,因为它再次调用 addRange 方法并传入 s2 和 5。这应该是指向另一个集合的,比如 LinkedList l2,而不是再次指向 s2。
假设最后一行 addRange(s2, 5); 应该是 addRange(l2, 5);,那么:
LinkedList l2 将添加从10开始(5*2)到25步长为5的所有整数。
接下来的问题在于:
s1.removeAll(11); 这一行语法上是错误的,removeAll 需要一个集合作为参数,而这里传递的是一个整数。
即使我们假定它应该是 removeAll 一个包含数字 11 的集合,之后的操作也会有问题。
因此,正确的答案是 A,因为该程序不能编译,它尝试在不兼容的集合上实现某些操作。特别是 removeAll 被错误地使用了一个整数而不是一个集合作为参数。此外,如果 addRange(s2, 5); 是错误的,那么这也可能导致编译错误。
addRange 方法用于向集合中添加一系列的整数值。
addRange(s2, 5); 这行代码尝试向 TreeSet 对象 s2 添加值,之后又试图向 s2 添加值,但是参数是 LinkedList l2。这里存在逻辑上的混乱,应该是向某个集合添加值,而不是重复使用 s2。
removeAll 方法用于从一个集合中移除另一个集合中存在的元素。
让我们逐步分析代码中的问题:
addRange(s1, 1); 向 HashSet s1 添加从2开始(1*2)到25步长为1的所有整数。
addRange(l1, 2); 向 ArrayList l1 添加从4开始(2*2)到25步长为2的所有整数。
addRange(s2, 3); 向 TreeSet s2 添加从6开始(3*2)到25步长为3的所有整数。
addRange(s2, 5); 这一行可能是个错误,因为它再次调用 addRange 方法并传入 s2 和 5。这应该是指向另一个集合的,比如 LinkedList l2,而不是再次指向 s2。
假设最后一行 addRange(s2, 5); 应该是 addRange(l2, 5);,那么:
LinkedList l2 将添加从10开始(5*2)到25步长为5的所有整数。
接下来的问题在于:
s1.removeAll(11); 这一行语法上是错误的,removeAll 需要一个集合作为参数,而这里传递的是一个整数。
即使我们假定它应该是 removeAll 一个包含数字 11 的集合,之后的操作也会有问题。
因此,正确的答案是 A,因为该程序不能编译,它尝试在不兼容的集合上实现某些操作。特别是 removeAll 被错误地使用了一个整数而不是一个集合作为参数。此外,如果 addRange(s2, 5); 是错误的,那么这也可能导致编译错误。
相关知识点:
程序操作集合不兼容不能编
