Java 基础面试题总结

1. String、StringBuffer、StringBuilder 的区别?

  • String:不可变的字符序列
  • StringBuffer:可变的字符序列;线程安全,效率低;底层使用 char[] 存储。
  • StringBuilder:可变的字符序列;线程不安全,效率高;底层使用 char[] 存储。

2. 关于 List

List接口:存储有序的、可重复的数组,相当于使用动态数组来替换原有数组

  • ArrayList:作为 List 接口的主要实现类;线程不安全,效率高;底层使用 Object[] 存储。
  • LinkedList:底层使用双向链表;对于频繁的插入删除操作,效率相对较高。
  • Vector:作为 List 接口的古老实现类;线程安全。效率低,底层使用 Object[] 存储。

3. 关于 Set 接口

Set接口:存储无序的、不可重复的数据。无序的意思是相较于 List 来说的。

  • HashSet:作为 Set 接口的主要实现类;线程不安全;可以存储 null。
  • LinkedHashSet:作为 HashSet 的子类;遍历其内部数据时,可以按照添加的顺序遍历;根据元素的 hashCode 值来决定元素的存储位置;使用双向链表存维护元素的顺序。
  • TreeSet:可以按照添加对象的指定属性进行排序;底层使用红黑树存储;有序,查询速度快。

4. 关于 Map 接口

  • HashMap:作为 Map 的主要实现类;线程不安全,效率高;可以存储 null 作为 key 或者 value。底层实现:JDK7 之前(数组 + 链表),JDK8开始(数组 + 链表 + 红黑树)。
    • LinkedHashMap:HashMap 的子类;保证在遍历 Map 元素时按照添加的顺序进行,因为在原有的 HashMap 底层基础上,添加了一对指针指向前一个元素和后一个元素(双向链表)。
  • TreeMap:保证按照添加的 key-value 进行排序,实现排序遍历;底层使用红黑树存储。
  • Hashtable:作为古老的实现类,比 Map 接口出现还早;线程安全,效率低;不能存储 null 作为 key 或者 value。
    • Properties:Hashtable 的子类,常用来处理配置文件;key 和 value 都是 String 类型。

点个赞呗:程序员虾说 » Java 基础面试题总结

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

请作者喝杯咖啡~

支付宝扫一扫打赏

微信扫一扫打赏