首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 集合與泛型面試題庫:從 ArrayList 到 TreeSet、從淺拷貝到類型擦除的完整解析

     編輯:Java 綜合教學

Java 集合與泛型面試題庫:從 ArrayList 到 TreeSet、從淺拷貝到類型擦除的完整解析

選擇題精選

  1. 遍歷 ArrayList 正確寫法:for(int i=0;i<list.size();i++) System.out.println(list.get(i))(選 B)。
    解析:Iterator 需用 hasNext() + next(),A 重複調用 next() 導致漏讀;C/D 語法錯誤。
  2. HashSet 去重後 size:List→HashSet 輸出 3(選 C)。
    解析:HashSet 依賴 equals/hashCode 去重,"Hello" 重複僅保留一個。
  3. 集合框架頂層接口:Collection(選 B)。Map 獨立體系。
  4. 鍵值對存儲類:HashMap(選 C)。
  5. 判斷 ArrayList 包含元素:contains("小說")(選 C)。
  6. LinkedList 與 ArrayList 共同方法:add(Object)、add(int,Object)、remove(Object)(選 ABC)。
    解析:removeLast() 為 LinkedList 專有。

代碼輸出題

1. 泛型異常類編譯失敗

class MyNumberException<T> extends Exception { ... }
// 錯誤:泛型類不可直接/間接繼承 Throwable(JLS §8.1.2)

2. LinkedList 邊遍歷邊刪除

LinkedList<String> link = new LinkedList<>(Arrays.asList("F","1","2","3","L"));
for(int i=0;i<link.size();i++) link.remove(i);
// 輸出:[1, 3]
// 解析:刪除後索引前移,i 遞增導致跳過元素。

3. 引用傳遞修改元素

MyClass mc4 = (MyClass) list.get(1); // 獲取索引 1 對象引用
mc4.value = 50;                        // 修改對象內部狀態
// 輸出:10, 50, 30

實戰編程題

  • Map 查世界杯冠軍:map.containsKey(year) ? map.get(year) : "未舉辦"。
  • List→Map 轉換並遍歷:Key 為 Account.id,Value 為對象,entrySet() 遍歷打印 id/balance。
  • 學生管理系統(序列化持久化):HashMap<String,Student> + ObjectOutputStream/InputStream 讀寫 student.txt,DAO/Service/Controller 分層。
  • TreeSet 自定義比較器降序:Comparator<Stu> 先比分數降序,分數相同按姓名升序。
  • 泛型求數組最大/最小值:<T extends Comparable<T>> 介面 + 實現類通用處理 Integer/Character 陣列。

高頻概念辨析

概念核心差異
Iterator vs ListIterator前者單向、後者雙向+可修改元素
Collection vs Collections接口 vs 工具類(排序/同步/二分查找)
ArrayList vs Vector非同步/擴容 1.5倍 vs 同步/擴容 2倍
HashMap vs Hashtable非同步/允許 null vs 同步/不允許 null
淺拷貝 vs 深拷貝引用共享 vs 遞歸複製對象圖
transient 關鍵字序列化時忽略該字段
泛型本質參數化類型,編譯期類型擦除,運行期無泛型信息
static 與泛型衝突static 屬於類、編譯期確定;泛型參數運行期確定,無法在 static 上下文使用類型參數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved