题目一:ArrayList和LinkList的描述,下面说法错误的是?
A:LinkedeList和ArrayList都实现了List接口
B:ArrayList是可改变大小的数组,而LinkedList是双向链接串列
C:LinkedList不支持高效的随机元素访问
D:在LinkedList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;
而在ArrayList的中间插入或删除一个元素的开销是固定的
题目二:若有下列定义,下列哪个表达式返回false?
String s = "hello";
String t = "hello";
char c[] = {'h', 'e', 'l', 'l', 'o'} ;
A:s.equals(t);
B:t.equals(c);
C:s==t;
D:t.equals(new String("hello"));
题目三:下面代码运行结果是?
class Value{
public int i=15;
}
public class Test{
public static void main(String argv[]){
Test t=new Test( );
t.first( );
}
public void first( ){
int i=5;
Value v=new Value( );
v.i=25;
second(v,i);
System.out.println(v.i);
}
public void second(Value v,int i){
i = 0;
v.i = 20;
Value val = new Value( );
v = val;
System.out.println(v.i+" "+i);
}
}
A:15 0 20
B:15 0 15
C:20 0 20
D:0 15 20
题目一:正确答案 D
解析:
这个说法说反了 Arraylist的内存结构是数组,当超出数组大小时创建一个新的数组,
把原数组中元素拷贝过去。其本质是顺序存储的线性表,插入和删除操作会引发后续元素移动,
效率低,但是随机访问效率高 LinkedList的内存结构是用双向链表存储的,
链式存储结构插入和删除效率高,不需要移动。但是随机访问效率低,
需要从头开始向后依次访问
题目二:正确答案 B
解析:
s和t两个String类型变量都是常量池中的字符串,
只有变量名不同是可以用双等号判断是否相等的,内存都是常量池中的字符串。
因此A,C正确,String类型重写了equals方法,用于判断字符串内容是否相等,
t和new出来的"hello"内容显然是相等的,D正确。
String底层源码的equals()方法处有判断这个参数是不是String类的实例,
如果不是则不执行判断直接返回false。B错误。
题目三:正确答案 A
解析:
考察的是值传递与引用传递,Java中原始数据类型都是值传递,
传递的是值得副本,形参的改变不会影响实际参数的值,
引用传递传递的是引用类型数据,包括String,数组,列表, map,
类对象等类型,形参与实参指向的是同一内存地址,因此形参改变会影响实参的值