集合框架概述
正确答案:C. Collection
Collection接口是Java集合框架的根接口,所有集合类(List、Set、Queue)都直接或间接实现了Collection接口。Map接口是独立的,不继承Collection。
正确答案:C. Collection
Collection接口是Java集合框架的根接口,所有集合类(List、Set、Queue)都直接或间接实现了Collection接口。Map接口是独立的,不继承Collection。
ArrayList使用
正确答案:B. ArrayList是线程安全的
ArrayList不是线程安全的。如果需要在多线程环境中使用,可以使用Collections.synchronizedList()方法包装ArrayList,或者使用Vector(线程安全但性能较低)。
正确答案:B. ArrayList是线程安全的
ArrayList不是线程安全的。如果需要在多线程环境中使用,可以使用Collections.synchronizedList()方法包装ArrayList,或者使用Vector(线程安全但性能较低)。
LinkedList
正确答案:B. 在列表中间插入元素
LinkedList在列表中间插入或删除元素时性能更好,因为只需要改变相邻节点的引用。而ArrayList需要移动后续所有元素。
正确答案:B. 在列表中间插入元素
LinkedList在列表中间插入或删除元素时性能更好,因为只需要改变相邻节点的引用。而ArrayList需要移动后续所有元素。
Vector和Stack
正确答案:B. Stack继承自Vector
Stack类继承自Vector类,因此它也是线程安全的。但现代Java开发中,更推荐使用Deque接口的实现(如ArrayDeque)来实现栈功能。
正确答案:B. Stack继承自Vector
Stack类继承自Vector类,因此它也是线程安全的。但现代Java开发中,更推荐使用Deque接口的实现(如ArrayDeque)来实现栈功能。
HashSet
正确答案:B. HashSet保证元素的插入顺序
HashSet不保证元素的插入顺序。如果需要保持插入顺序,应该使用LinkedHashSet。
正确答案:B. HashSet保证元素的插入顺序
HashSet不保证元素的插入顺序。如果需要保持插入顺序,应该使用LinkedHashSet。
TreeSet
正确答案:C. TreeSet基于红黑树实现
TreeSet基于TreeMap实现,使用红黑树数据结构存储元素,因此元素是有序的(自然顺序或自定义比较器顺序)。TreeSet不允许null元素,也不是线程安全的。
正确答案:C. TreeSet基于红黑树实现
TreeSet基于TreeMap实现,使用红黑树数据结构存储元素,因此元素是有序的(自然顺序或自定义比较器顺序)。TreeSet不允许null元素,也不是线程安全的。
LinkedHashSet
正确答案:B. LinkedHashSet保证元素的插入顺序
LinkedHashSet继承自HashSet,但内部使用链表维护元素的插入顺序。因此,在迭代LinkedHashSet时,元素会按照插入顺序返回。
正确答案:B. LinkedHashSet保证元素的插入顺序
LinkedHashSet继承自HashSet,但内部使用链表维护元素的插入顺序。因此,在迭代LinkedHashSet时,元素会按照插入顺序返回。
泛型基础
正确答案:D. 泛型提供了编译时类型安全
泛型的主要目的是在编译时提供类型安全,避免在运行时出现ClassCastException。泛型在运行时通过类型擦除实现,因此不保留类型信息,也不能用于基本数据类型。
正确答案:D. 泛型提供了编译时类型安全
泛型的主要目的是在编译时提供类型安全,避免在运行时出现ClassCastException。泛型在运行时通过类型擦除实现,因此不保留类型信息,也不能用于基本数据类型。
泛型方法
正确答案:A. public void myMethod(T param) {}
泛型方法的类型参数声明放在方法返回类型之前。正确的语法是:访问修饰符 <类型参数> 返回类型 方法名(参数列表)。
正确答案:A. public void myMethod(T param) {}
泛型方法的类型参数声明放在方法返回类型之前。正确的语法是:访问修饰符 <类型参数> 返回类型 方法名(参数列表)。
泛型通配符
正确答案:D. 使用通配符后可以向集合中添加任意类型元素
使用通配符后,向集合中添加元素会受到限制。例如,使用? extends T时不能添加任何元素(null除外),使用? super T时可以添加T及其子类型元素。
正确答案:D. 使用通配符后可以向集合中添加任意类型元素
使用通配符后,向集合中添加元素会受到限制。例如,使用? extends T时不能添加任何元素(null除外),使用? super T时可以添加T及其子类型元素。
类型擦除
正确答案:D. 以上都是
类型擦除是Java泛型的实现方式,编译器在编译时擦除所有泛型类型信息,将泛型类型替换为它们的边界(通常是Object),并在需要时插入类型转换。因此,在运行时,泛型类型信息不可用。
正确答案:D. 以上都是
类型擦除是Java泛型的实现方式,编译器在编译时擦除所有泛型类型信息,将泛型类型替换为它们的边界(通常是Object),并在需要时插入类型转换。因此,在运行时,泛型类型信息不可用。
集合遍历
正确答案:C. 迭代器
使用迭代器的remove()方法可以在遍历过程中安全地删除元素,而不会抛出ConcurrentModificationException。其他方式在遍历过程中修改集合结构会导致异常。
正确答案:C. 迭代器
使用迭代器的remove()方法可以在遍历过程中安全地删除元素,而不会抛出ConcurrentModificationException。其他方式在遍历过程中修改集合结构会导致异常。
迭代器使用
正确答案:A. 没有使用hasNext()检查
在调用it.next()之前,应该使用it.hasNext()检查是否还有下一个元素。否则,当没有更多元素时,会抛出NoSuchElementException。
正确答案:A. 没有使用hasNext()检查
在调用it.next()之前,应该使用it.hasNext()检查是否还有下一个元素。否则,当没有更多元素时,会抛出NoSuchElementException。
集合框架综合
正确答案:C. LinkedHashMap
LinkedHashMap可以通过重写removeEldestEntry方法实现LRU缓存策略。它维护了元素的插入顺序或访问顺序,非常适合实现缓存淘汰策略。
正确答案:C. LinkedHashMap
LinkedHashMap可以通过重写removeEldestEntry方法实现LRU缓存策略。它维护了元素的插入顺序或访问顺序,非常适合实现缓存淘汰策略。
泛型综合
正确答案:C. 编译错误
使用? extends Number的通配符时,不能向列表中添加任何元素(null除外),因为编译器无法确定列表的具体类型。因此,list.add(1)会导致编译错误。
正确答案:C. 编译错误
使用? extends Number的通配符时,不能向列表中添加任何元素(null除外),因为编译器无法确定列表的具体类型。因此,list.add(1)会导致编译错误。