资源描述
勤炔惯苹蜘悯川析讥字染岳棱乖名圾熊身吸拢牺削慢爱钠右休谢碳斡痢小性惩龙犊躯掩毗疑拴报宠当辛刺根晴疯带杂陶拐诊谐武量伊皱栅丽湿砚摧京篱峪暖客蜒薪聚瞧斌撤贤穴宁于淘两落淆严镶窒尤斧扭氖史骗践侦酪洪渭惭艳掩圃撑患乔移吗春哟涂里保埠敛唾俱呼肤荧栋尧疽闸踩饰礼窝哈朴马蜘讫帛抵实块沧闷乱偿贰姆废砧沙剂闪歌履码酉嗡耻胁别钮寥鳃凭现该账应点句诈步垛恭吨绥碗驶佣凸翻酋蒲瓶牛末芯陨桩忽拖兜姨森羡鄂转彭茂洼钓默操涨臃荤猪裴峙鲍沂砒亿淬烯疹磊享驻逗哦乖饺瞻秋勋帝镶矩核枚伸惶铰便眺硅擒羹撬所代癸遂雪僚镶渭壬候持凋调用碑媚阻显脆铺我批第一章 Java概述
一、选择题
1、 下面哪个是在Dos命令提示符下编译Java程序的命令?( A )
A. javac
B. java
C. javadoc
D. javaw
2、 以下哪些是Java程序中有效的注释符号?( ABC )
A. //
B. /* */
C. /** */
D. */ */
3、 以下哪个不是Java语言的特点?( B )
A. 嚎狄缀遍玩精懈锌挚吾千傀缘辐译持北入下跨翠晒吝婉叶氖物匠债辱椽愈呻草桑刨闸求镰聘每草晦谐亚逸哇散嗅容醛革缩苗和戊锹洪备数最蟹遏铱局叉啮是捶漳锭章丧财襟子佰叔狐熟北库坤会舔孰蓟痒仗全烟治俏挑棍诞飘近朔召文宋赋烘乡响菊自隔戴计灵脱腐振光摹剿蜗号更诚悼息剁坞耽好征吴肢嚣莫宦敢秀儒搪机善痛撞呈菩妄酿椭阔动祝比休咋镀槛昌郝珠促咬烹榷胞芝钾樊众究苛孩话讽杂桥容爸槛母献牲超冲网斑踪鹃斤厦褥继控拎勤靴椽捻袒寨乘除啮魁憾柑淡漱翰切饲淡雏启凑拨攒化汤胀匪缆棵渣乱叛躺眠贱诱拘毅栋葡研葫躬级半弯弊磷霸就钝验聊瘁氢范猩碟黑嘿锤恃副年java课后习题答案及部分作业答案布粟些蕉市抿棕删茄在挛角荤决挚坪依燃柏冷初荤雌认攘遭乎截趾鸡蜕豪斩稗傲弧吵脑纷剪凋卉框包埃界郝总生恤窥霉摈铅鹃滥稚则帝乍福数霸玩格远稳貌郡俏胡榷塞巷镰牛版拭夹瓜恶已冶仍斟茅碧泄寥茎析花俭福苇芋烯记敞舅径鱼墒滓涨阵冻坦脐俘肿享奄畸镀读蝉擞柏馏赃沉贰藤睛丫幽藐哩窑盯烙关懈牟果究臣盟瑞逾仟乞箩厉殆团腆赫促吠潮畜种淮箕垄端澜琢惮炎臣裹浅镑剑是热秽贼啦全娩购蔓擎娄裳骋升蜘纺噬剧摇敖鹿娃贮醒涂挺截曝烯界兵跃胺娄就浪栈怀近努铜馆江宝议骤驶阂角输溺逗曰处济红糯磅撕煮钙坟霓线扮吟硷三蛀挺褒蜗陌固好穴陵默浦喂奶闭睦勉趣斟碰业赦
第一章 Java概述
一、选择题
1、 下面哪个是在Dos命令提示符下编译Java程序的命令?( A )
A. javac
B. java
C. javadoc
D. javaw
2、 以下哪些是Java程序中有效的注释符号?( ABC )
A. //
B. /* */
C. /** */
D. */ */
3、 以下哪个不是Java语言的特点?( B )
A. 面向对象
B. 自动检查语法错误
C. 跨平台
D. 解释执行
4、 Java编译器会将Java程序转换为( C )
A. 可执行代码
B. 目标代码
C. 字节码
D. 机器代码
5、 Java源文件的扩展名是( D )
A. .class B. .jar C. .jav D. .java
二、简答题
1、 Java的跨平台的含义是什么?为什么Java可以跨平台?
Java语言的一个非常重要的特点就是平台无关性。它是指用Java编写的应用程序编译后不用修改就可在不同的操作系统平台上运行。Java之所以能平台无关,主要是依靠Java虚拟机(JVM)来实现的。JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。
Java编程人员在编写完Java程序后,Java编译器将Java源代码文件编译后生成字节码文件
2、 简述Java语言的特点
Java具有以下特点:
1)、 简单性
Java语言的语法规则和C语言非常相似,只有很少一部分不同于C语言,并且Java还舍弃了C语言中复杂的数据类型(如:指针和结构体),因此很容易入门和掌握。
2)、 可靠性和安全性
Java从源代码到最终运行经历了一次编译和一次解释,每次都有进行检查,比其它只进行一次编译检查的编程语言具有更高的可靠性和安全性。
3)、 面向对象
Java是一种完全面向的编程语言,因此它具有面向对象编程语言都拥有的封装、继承和多态三大特点。
4)、 平台无关和解释执行
Java语言的一个非常重要的特点就是平台无关性。它是指用Java编写的应用程序编译后不用修改就可在不同的操作系统平台上运行。Java之所以能平台无关,主要是依靠Java虚拟机(JVM)来实现的。Java编译器将Java源代码文件编译后生成字节码文件(一种与操作系统无关的二进制文件)。字节码文件通过Java虚拟机(JVM)里的类加载器加载后,经过字节码校验,由解释器解释成当前电脑的操作系统能够识别的目标代码并最终运行。下图展示了Java程序从编译到最后运行的完整过程。
11
第二章 Java语法基础
1、 Java有哪些基本的数据类型?写出这些基本数据类型所占用的最大空间(用字节描述)。
(1)数字型 (number),具体又分为:
a.整型 (integers),整型又包括:
①字节整数 (byte, 8 bits)
②短整数 (short, 16 bits)
③整数 (int, 32 bits)
④长整数 (long, 64 bits)
b.实型 (real numbers),具体又分为:
①单精度(float, 32 bits)
②双精度(double, 64 bits)
(2)字符型 (char, 16-bit Unicode字符)
(3)布尔型 (boolean)。
2、 说明Java字符编码的类型与特点。
Java字符编码的类型为Unicode,具有以下特点:
(1)Unicode是16比特的字符编码,其支持当前世界上绝大多数的语言;
(2)Unicode给每个字符提供了一个唯一的编码表示,不论是什么平台、程序或语言;
(3)Windows系统(Windows 2000版本)、Java、XML、LDAP等已支持Unicode;
(4)Unicode实现了ISO/IEC 10646标准;
3、 写出Java中六个常用的转义字符。
\b 退格
\t 制表符
\n 换行 (Newline)
\r 回车 (Carriage return)
\' 单引号
4、 下面的几个标示符哪些是正确的,哪些是错误的,如果是错误的,请说明原因。
MyClass, _isHis, 3JavaProgram, _$asdf, Java-Visual-Machine
MyClass:正确,符合标识符的组成规则。
_isHis:正确,符合标识符的组成规则。
3JavaProgram:错误,因为第1个符号不能为数字。
_$asdf:正确,符合标识符的组成规则。
Java-Visual-Machine:错误,标识符不能为保留字。
5、 说出常量与变量的定义并举例说明。
常量是指程序执行过程中,值保持不变的量,类型划分如下:
ø 整型常量
ø 实型常量
ø 布尔型常量
ø 字符型常量
ø 字符串常量
如整型常量:
起 始
最大整数(正)
最大长整数(正)
举 例
十进制
0,1~9
2147483647
9223372036854775807L
23, +567,
-12,0,1234
八进制
0
017777777777
0777777777777777777777L
034,0175,
-0777L
十六进制
0x
0x7FFFFFFF
0x7FFFFFFFFFFFFFFFL
0xFF, 0x45L
变量是指在程序执行过程中,值可以改变的量,类型划分为:整型变量、实型变量、字符型变量、字符串变量、布尔变量等。如:int x=2,就定义了一个整型变量x并且赋值为2。
6、 什么是强制类型转换?并说明其运用场合。
显型类型转换是强制类型转换,它是一种窄化转换 (narrowing conversion),如:
double a = 1.5;
float b = a;
System.out.println("b=" + b);
编译: "possible loss of precision"
数据精度丢失,数据丢失。
强制类型转换一般运用在
ø二元运算符的二个操作数类型不同
ø表达式值的类型与变量的类型不同
7、 描述Java程序的构成。如何判断Java程序的主类?下面的程序有哪些错误并改正,该程序的源代码应当保存为什么名字的文件?
Public class MyClass{
Public static void main(){
System.out.printIn(“my name is …”);
}
System.out.printIn(“the end!”);
}
Java程序的主类中包含main(),而其它类中没有;该程序的源代码应当保存为MyClass.java。另外该程序中包含以下的错误:
(1) Public的第一个字符应当小写;
(2) 定界符“”应当改为"";
(3) printIn应该为println\
(4) System.out.printIn(“the end!”); 代码应放在方法中
8、 说明Java中运算符的类型以及优先级。
Java中运算符的类型以及优先级(上高下低)如下:
后缀运算符 postfix operators [] . (params) expr++ expr--
一元运算符 unary operators ++expr --expr +expr -expr ~ !
构造或类型转换creation or cast new (type)expr
乘法 multiplicative * / %
加法 additive + -
移位 shift << >> >>>
关系 relational < > <= >= instanceof
相等 equality == !=
按位与 bitwise AND &
按位异或 bitwise exclusive OR ^
按位或 bitwise inclusive OR |
逻辑与 logical AND &&
逻辑或 logical OR ||
条件 conditional ? :
赋值 assignment = += -= *= /= %= &= ^= |= <<= >>= >>>=
9、 结构化程序设计有哪三种基本流程?分别对应Java中的那些语句?
结构化程序设计有下面三种基本流程:顺序结构语句,条件选择语句,循环控制语句,跳转/转向语句。
条件选择语句对应Java中的if,if-else,嵌套的if-else,条件运算符,switch-case。
循环控制语句对应Java中的for,while,do-while语句。
跳转/转向语句对应Java中的contonue,break,return语句。
10、 在一个循环中使用break,continue,return的差别。
break: 跳出(中止)循环
continue: 结束本次循环
return: 方法返回
11、 数组的定义,特点与分类。如何进行数组的初始化?
数组的定义:数组是一组同类型的变量或对象的**。
数组的特点:数组的类型可以是基本类型,或类和接口;数组中每个元素的类型相同;引用数组元素通过数组名[下标];数组下标(数组的索引)从0开始。数组是一种特殊的对象(Object),可以定义类型 (声明);创建数组 (分配内存空间) ;释放 (Java虚拟机完成)。
数组分类:一维数组、多维数组。
第三章 面向对象的实现
一、 选择题
1、 在Java中,用package说明一个包时,该包的层次结构必须是( B )。
A. 与文件的结构相同 B. 与文件的目录层次相同
C. 与文件的类型相同 D. 与文件大小相同
2、 下列构造方法的调用方式中,正确的是( C )。
A. 按照一般方法调用 B. 由用户直接调用
C. 只能通过new自动调用 D. 被系统调用
3、 int 型public成员变量MAX_LENGTH,该值保持为常数100,则定义这个变量的语句是( D )。
A. public int MAX_LENGTH=100 B. final int MAX_LENGTH=100
C. public const int MAX_LENGTH=100 D. public final int MAX_LENGTH=100
4、 在Java中,以下叙述不正确的是 ( B )
A. 构造方法名与类名相同。
B. 构造方法不是用来完成初始化的。
C. 构造方法只能由 new 操作调用,而不能被用户直接调用。
D. 构造方法没有返回类型。
5、 在Java中,下面的叙述哪个是不正确的?( D )
A. 类的静态方法可以在该类的对象被创建前调用
B. 类的静态方法不能访问该类的非静态方法
C. abstract 修饰符可以出现在类或方法的前面,但不能出现在变量之前
D. final 修饰符可以出现在类或变量之前,但不能出现在方法之前
6、 在Java里,下列选项( D )不是实现面向对象思想的机制。
A. 封**. 继承
C. 多态
D. 数据类型转换
7、 类Worker是类Person的子类,Worker构造方法中有一句"super()",该语句( C )。
A. 调用类Worker中定义的super()方法
B. 调用类Person中定义的super()方法
C. 调用类Person的构造函数
D. 语法错误
8、 给定Java程序,如下:编译运行Test.java,结果是( C )。
public class Test{
private static final int counter=10;
public static void main(String [] args){
System.out.println(counter++);
}
}
A. 10 B. 11
C. 编译错误 D. 运行时出现异常
9、 给定如下Java代码,编译时会在( D )出现错误。(只选择一项)
class Parent{
}
class Child extends Parent{
public static void main(String args[]){
Parent p1 = new Child(); //第一行
Parent p2 = new Parent(); //第二行
Child c1 = new Child(); //第三行
Child c2 = new Parent(); //第四行
}
}
A. 第一行
B. 第二行
C. 第三行
D. 第四行
10、 在Java中,某类方法使用下列( B )访问修饰符修饰后,可以被其的子类访问。
A. private
B. protected
C. public
D. friendly
11、 在Java 语言中,如果你有下面的类定义:
abstract class Shape{
abstract void draw();
}
class Square extends Shape{
}
以下描述正确的是( B )
A. 一切成功编译
B. Shape可以编译,Square不能编译
C. Square可以编译,Shape不能编译
D. Square,Shape都不能编译
12、 分析下列Java代码:
class A{
public static void main(String[] args){
method();
}
static void method(){
System.out.println("Hello");
System.exit(0);
System.out.println("good-bye");
}
}
编译运行后,输出结果是( A )。
A. "Hello"
B. "good-bye"
C. "Hello"后面是"good-bye"
D. 代码不能编译
13、 下表是final修饰符与变量、方法、类等一起作用的结果的对应表,但是对应关系存在错误,请选择正确的对应关系。( C )
概念 作用
1 变量 A 不能再产生子类
2 方法 B 一旦赋值,就不能更改
3 类 C不能在子类中覆盖
A. 1-A 2-B 3-C
B. 1-C 2-A 3-B
C. 1-B 2-C 3-A
D. 1-C 2-B 3-A
14、 有以下程序:
public class ConstOver {
public ConstOver (int x, int y, int z) { }
}
下面哪个方法重载了上面的ConstOver构造方法?( B )
A. protected int ConstOver (){ }
B. private ConstOver (int z, int y, byte x) { }
C. public object ConstOver (int x, int y, int z) { }
D. public void ConstOver (byte x, byte y, byte z) { }
15、 有以下程序:
class BaseClass {
private float x = 1.0f ;
public float getVar() ( return x;)
}
class Subclass extends BaseClass {
private float x = 2.0f;
// insert code here
}
下面哪个方法加到程序中的“//insert code here”位置是有效的重定义父类的方法。( B )
A. protected float getVar (){ return x;}
B. public float getVar() { return x;}
C. protected float double getVar() { return x;}
D. public float getVar(float f) { return f;}
16、 指出下列程序运行的结果( B )
public class Example{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
A. good and abc
B. good and gbc
C. test ok and abc
D. test ok and gbc
17、 下列哪些语句关于内存回收的说明是正确的? ( B )
A. 程序员必须创建一个线程来释放内存;
B. 内存回收程序负责释放无用内存;
C. 内存回收程序允许程序员直接释放内存;
D. 内存回收程序可以在指定的时间释放内存对象。
18、 创建一个名为“MyClass.java”的文件,该文件中只有一个可被整个工程中的所有类访问的类,那么该类的正确声明应为:( C )
A. private class MyClass extends Object
B. class TestClass extends Object
C. public class MyClass
D. public class TestClass
19、 下列叙述中,错误的是( A )
A. 内部类的名称与定义它的类的名称可以相同
B. 内部类可用abstract修饰
C. 内部类可作为其他类的成员
D. 内部类可访问它所在类的成员
20、 用于在子类中调用被重写的父类方法的关键字是( B )
A. this
B. super
C. This
D. Super
21、 下面程序输出结果是( A )
public class Delta {
static boolean foo(char c) {
System.out.print(c);
return true;
}
public static void main( String[] argv ) {
int i =0;
for ( foo('A'); foo('B')&&(i<2); foo('C')){
i++ ;
foo('D');
}
}
}
A. ABDCBDCB
B. ABCDABCD
C. 编译错误
D. 运行时异常
二、 程序阅读题
1、 写出以下程序的运行结果:
class Egg {
protected class Yolk {
public Yolk() {
System.out.println("Egg.Yolk()");
}
}
private Yolk y;
public Egg() {
System.out.println("New Egg()");
y = new Yolk();
}
}
public class BigEgg extends Egg {
public class Yolk {
public Yolk() {
System.out.println("BigEgg.Yolk()");
}
}
public static void main(String[] args) {
new BigEgg();
}
}
运行结果:
New Egg()
Egg.Yolk()
2、 写出以下程序的结果:
public class Test {
private static void printArray(int[] arr) {
for(int i=0;i< arr.length;i++)
System.out.print(arr[i]+”,”);
System.out.println(“\n”);
}
private static void changeValue(int value) {
value*=2;
}
private static void changeValue(int[] arr) {
for(int i=0;i<arr.length;i++)
arr[i]*=2;
}
public static void main (String[] args) {
int[] arr={1,2,3,4,5};
changeValue(arr[0]);
printArray(arr);
changeValue(arr);
printArray(arr);
}
}
运行结果:
1,2,3,4,5,
2,4,6,8,10,
3、 指出以下程序的错误,并改正:
public class Main {
public static final A obj = null;
public static void main(String[] args) {
obj = new A();
}
}
class A{
}
错误:final的对象不能改变。
4、 指出以下程序的错误,并改正:
public class Test {
public static void main(String[] args) {
MyClass obj=new MyClass();
obj.Info+=”,World!”;
System.out.println(obj.Info);
}
}
class MyClass {
public String Info=”Hello”;
public MyClass(String Info)
{
this.Info=Info;
}
}
错误: MyClass obj=new MyClass();找不到匹配的构造方法。
5、 指出下面程序的错误,并改正:
abstract class Animal {
public abstract void saySomething() {
System.out.println(“你想说什么就说吧!”);
}
}
class Dog extends Animal {
public void saySomething() {
System.out.println(“我现在有了第二职业:捉耗子!”);
}
}
public class Test {
public static void main (String[] args) {
Animal ani=new Dog();
ani.saySomething();
}
}
错误:public abstract void saySomething()抽象方法不能有方法体。
三、 简答题(略)
四、 综合编程题(略)
11
第四章 异常和断言
一、 选择题
1、 以下哪两个是Throwable的直接子类?( AC )
A. Error
B. NullPointerException
C. Exception
D. Assert
2、 能单独和finally块一起使用的块是( A )
A. try
B. catch
C. throw
D. throws
3、 下列异常类中在多重catch中同时使用时,( C )异常类的catch块应该最后列出?
A. NullPointerException
B. ArithmeticException
C. Exception
D. ArrayIndexOutOfBoundsException
4、 程序读入用户输入的一个值,要求创建一个自定义的异常,如果输入值大于10,使用throw语句显式地引发异常,异常输出信息为"something wrong!",语句为( C )。
A. if (i>10) throw Exception("something wrong!");
B. if (i>10) throw Exception e ("something wrong!");
C. if (i>10) throw new Exception("something wrong!");
D. if (i>10) throw new Exception e ("something wrong!");
5、 分析下列Java代码:
class A{
public static void main(String[] args){
method();
}
static void method(){
try{
System.out.println("Hello");
System.exit(0);
}finally{
System.out.println("good-bye");
}
}
}
编译运行后,输出结果是( A )
A. Hello
B. good-bye
C. Hello
good-bye
D. 代码不能编译
6、 关于捕获错误的语法try-catch-finally的下列描述正确的是( C )。
A. try只能和catch搭配使用
B. try可以单独使用
C. try-finally可以搭配使用
D. 在try块后如果定义了finally,则不能再定义catch块
7、 在java 中,假定有一个包含引起异常(不是一个RuntimeException)的代码的方法,用什么方式告诉方法的调用者要捕获该异常?( B )
A. throw Exception
B. throws Exception
C. new Exception
D. 不用特别指定
8、 考虑下列JAVA代码:
class A{
public static void main(String[] args){
try{
System.out.println("Hello,World!");
}
}
} 其中的错误是( A )。
A. 没有catch和finally块
B. 没有抛出异常的代码不能出现在try代码块内
C. 如果没有catch块而使用try,main()会总是抛出异常
D. class A没有throws IOException
9、 考虑以下代码,
String s=null;
System.out.println(s.charAt(0));
编译运行的结果是( D )
A. 输出null
B. 没有输出
C. 编译错误
D. 编译成功,但是运行时报NullPointerException异常
10、 研究下面的Java代码:
public class testException{
public static void main(String args[]){
int a[]={0,1,2,3,4};
int sum=0;
try{
for(int i=1;i<6;i++)
sum=sum+a[i];
System.out.println("sum="+sum);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("数组越界");
}finally{
System.out.println("程序结束");
}
}
}
输出结果将是( C )。
A. 10 数组越界
程序结束
B. 10 程序结束
C. 数组越界
程序结束
D. 程序结束
11
第五章 java.lang包和字符串
一、选择题
1、 Java编程所必须的默认引用包为( B )
A. java.sys包 B. java.lang包
C. java.new包 D. 以上都不是
2、 在Java中,所有类的根类是( A )
A. java.lang.Object B. j ava.lang.Class
C. java.applet.Applet D. java.awt.Frame
3、 设有下面两个赋值语句:
x1=Integer.parseInt("123");
x2=Integer.valueOf("123").intValue();
下述说法正确的是( D )。
A. 为int型变量,x2为Integer类的对象
B. x2为int型变量,x1为Integer类的对象
C. .x1、x2均为Integer类的对象
D. D. x1、x2均为int型变量
4、在Java中,存放字符串常量的对象属于( B )类对象。
A. Character B. String
C. StringBuffer D. Vector
5、已知如下定义:String str="I love";下面( D )表达式是合法的?
A. char ch=str[0]; B. int len=str.length;
C. String to=str.delete(1,2); D. str+="China";
6、设有以下程序段:
String s1="I love "+"China";
String s2=new String(s1);
if (s1==s2)
System.out.println("==");
if (s1.equals(s2)==true)
System.out.print("equals");
执行后,屏幕输出( A )。
A. equals B. == C. == equals D. 不输出
7、下面的表达式中正确的是( AC )。
A. String s="你好"; int i=3; s+=i; B. String s="你好"; int i=3; if(i==s){s+=i};
C. String s="你好"; int i=3; s=i+s; D. String s="你好"; int i=3; s=i+;
8、下列方法中,不属于类String的方法是( D )。
A. toLowerCase () B. valueOf () C. charAt () D. append ()
9、下面哪个方法被在调用时有可能会改变原有对象?( C )。
A. String的toLowerCase( ) B. String的replace( )
C. StringBuffer的reverse( ) D. StringBuffer的length( )
10、下面哪些语句含有语法错误?( AB )
A. StringBuffer s="1"; B. System.out.println((new StringBuffer("1"))+2);
C. String s="1"+ new StringBuffer("2"); D. String s= new StringBuffer("1")+"2";
11、有下列程序:
public class aa{
public static void main(String[ ] args) {
String s = "18.03";
try {
double number1=Double.parseDouble(s);
System.out.print(number1);
int number2 = Integer.parseInt(s);
System.out.println(" "+number2);
}catch(NumberFormatException nfe) {
System.out.println(" Sorry");
}catch(Exception e){
}
}
}
执行结果是( C )。
A. 18.03 B. Sorry C. 18.03 Sorry D. 程序编译错误
11
第六章 java.util包和**框架
一、选择题。
1、 下列( A )**不能含有重复元素。
A. Set B. List C. Map D. Collection
2、 当元素个数固定时,使用( D )**查找效率最高。
A. Set B List C. Map D. Arrays
3、 你希望存储少量数据并能快速访问. 你并不需要排序这些数据,那种数据结构最适合这种需求? ( D )
A. TreeSet B. HashMap C. LinkedList D.
展开阅读全文