java基础面试题5道开胃菜三
目录
java基础面试题5道开胃菜(三)
1. Java中的构造器(Constructor)有什么特点?
答案 :
构造器用于初始化对象,它与类同名。
构造器没有返回类型,包括
void
。如果没有显式定义构造器,Java编译器会自动提供一个无参构造器(默认构造器)。
构造器可以重载,但不能重写。
示例:
public class MyClass { private int value; // 无参构造器 public MyClass() { this.value = 0; } // 有参构造器 public MyClass(int value) { this.value = value; } }
2. Java中的 instanceof
关键字有什么用途?
答案 :
instanceof
用于检查对象是否是某个类的实例或其子类的实例。它返回一个布尔值(
true
或false
)。示例:
Object obj = new String("Hello"); if (obj instanceof String) { System.out.println("obj is an instance of String"); } else { System.out.println("obj is not an instance of String"); }
instanceof
也可以用于接口检查:if (obj instanceof Serializable) { System.out.println("obj implements Serializable"); }
3. Java中的 static
和 final
关键字能否同时修饰一个方法?
答案 :
可以。
static
和final
可以同时修饰一个方法。static
表示该方法是静态的,属于类而不是对象。final
表示该方法不能被子类重写。示例:
public class MyClass { public static final void display() { System.out.println("This is a static final method."); } }
这种方法通常用于定义工具类中的静态工具方法。
4. Java中的 ArrayList
和 LinkedList
有什么区别?
答案 :
ArrayList
:基于动态数组实现,支持快速随机访问(通过索引)。
插入和删除操作较慢,因为可能需要移动大量元素。
示例:
List<String> arrayList = new ArrayList<>(); arrayList.add("Hello"); arrayList.add("World");
LinkedList
:基于双向链表实现,支持高效的插入和删除操作。
不支持快速随机访问,需要从头或尾遍历链表。
示例:
List<String> linkedList = new LinkedList<>(); linkedList.add("Hello"); linkedList.add("World");
性能特点 :
- 随机访问
:
ArrayList
更快(O(1)),LinkedList
较慢(O(n))。 - 插入/删除
:
LinkedList
更快(O(1)),ArrayList
较慢(O(n))。
- 随机访问
:
5. Java中的 HashMap
和 TreeMap
有什么区别?
答案 :
HashMap
:基于哈希表实现,通过键的
hashCode()
方法计算存储位置。不保证键值对的顺序。
允许一个键为
null
,一个值为null
。示例:
Map<String, Integer> hashMap = new HashMap<>(); hashMap.put("key1", 100); hashMap.put("key2", 200);
TreeMap
:基于红黑树实现,按键的自然顺序或指定的比较器排序。
保证键值对的顺序,可以使用
firstKey()
、lastKey()
等方法。不允许键为
null
(因为无法比较)。示例:
Map<String, Integer> treeMap = new TreeMap<>(); treeMap.put("key1", 100); treeMap.put("key2", 200);
性能特点 :
- 插入/删除/查找
:
HashMap
平均时间复杂度为O(1),TreeMap
为O(log n)。 - 排序
:
TreeMap
按键的自然顺序或指定顺序排序,而HashMap
不保证顺序
- 插入/删除/查找
: