HashSet 和 TreeSet 的區別?
底層實現:HashSet 基于 HashMap 實現,使用哈希表存儲元素;TreeSet 基于 TreeMap,底層為紅黑樹。
元素順序:HashSet 無序;TreeSet 會根據元素的自然順序或傳入的 Comparator 進行排序。
性能:HashSet 的增刪查為 O(1),TreeSet 為 O(log n)。
null 值支持:HashSet 允許添加一個 null 元素;TreeSet 不允許 null 元素。
使用場景:僅需去重且不關心順序時使用 HashSet;需要排序或范圍查詢時使用 TreeSet。
?Collection 和 Collections 的區別
Collection 是 Java 中集合類的根接口之一,包括 List、Set、Queue 等。
Collections 是一個工具類,提供對集合進行操作的靜態方法,例如排序、同步包裝等。
HashMap 和 Hashtable 的區別?
線程安全:HashMap 非線程安全;Hashtable 是線程安全的,內部方法有 synchronized 修飾。
null 鍵值支持:HashMap 允許一個 null 鍵和多個 null 值;Hashtable 不允許 null 鍵或 null 值。
性能:HashMap 性能更高;Hashtable 由于加鎖性能較差。
是否過時:Hashtable 已基本被淘汰,推薦使用 ConcurrentHashMap。
Java 集合框架的常見接口有哪些?
Collection 接口:包括 List、Set、Queue 等。
Map 接口:用于存儲鍵值對,如 HashMap、TreeMap 等。
List:有序可重復,如 ArrayList、LinkedList。
Set:無序不重復,如 HashSet、TreeSet。
Queue:隊列結構,如 PriorityQueue、LinkedList。
Collection 接口的最佳實踐?
編程時面向接口,如 List list = new ArrayList<>();
根據實際使用場景選擇實現類。
多線程場景使用并發集合或通過 Collections.synchronizedXXX 包裝集合。
避免返回 null,可返回空集合:Collections.emptyList()。
使用泛型增強類型安全。
ArrayList 和 HashMap 的默認容量?
ArrayList 的默認初始容量為 10。
HashMap 的默認初始容量為 16,負載因子為 0.75,超過容量 * 負載因子即觸發擴容。
Java 中抽象和封裝的區別?
抽象:關注對象具有什么功能,對外暴露必要的接口,隱藏實現細節。關鍵詞:abstract、interface。
封裝:將數據和操作封裝在類中,通過訪問控制符隱藏內部實現。關鍵詞:private、getter/setter。
Java 是否支持多繼承?
Java 不支持類的多繼承,以避免菱形繼承問題。
Java 支持接口的多繼承,一個類可以實現多個接口。
Java 8 之后接口支持 default 方法,如有沖突需在實現類中顯式重寫。
static 方法中是否可以訪問非 static 變量?
不可以。static 方法屬于類,不依賴具體實例;非 static 變量屬于對象,必須通過對象訪問。
示例:
class Demo {int a = 10;static void test() {System.out.println(a); // 編譯錯誤}
}
正確做法:
Demo d = new Demo();
System.out.println(d.a); // 正確