測試題15(答案詳析)

1 如何實現數組和 List 之間的轉換

1.1 數組轉List:使用Arrays.asList(array) 進行轉換
1.2 List 轉數組:使用自帶的 toArray()方法

代碼示例:java

//list to array
List<String> list = new ArrayList<String>();
list.add("123");
list.add("456");
list.toArray();


//array to list
String[] array = new ArrayList<String>();
Arrays.asList(array);

2. 迭代器Iterator 是什麼?

Iterator 提供遍歷任何Collection 的接口。咱們能夠從一個 Collection 中使用迭代器方法來獲取迭代器實例。迭代器取代了Java 集合框架中的 Enumeration,迭代器容許調用者在迭代過程當中移除元素。數組

2.1 Iterator 怎麼使用?有什麼特色?

Iterator 使用代碼以下:安全

List<String> list = new ArrayList();
Iterator<String> it = List.iterator();
while(it.hasNext()) { 
    String obj = it.next();
    System.out.println(obj);
}

Iterator 的特色是隻能單項遍歷,可是更安全,由於它能夠確保在當前遍歷的集合元素被更改的時候,就會拋出 ConcurrentModificationException 異常。框架

2.2 如何遍歷邊移除 Collection 中的元素?

邊遍歷邊修改 Collection 的惟一正確方式是使用 Iterator.remove()方法,以下:spa

Iterator<Integer> it = list.iterator();
while(it.hasNext()){ 
   //do something
   it.remove();
}

一種常見的的錯誤代碼:線程

for(Integer i :list) { 
    list.remove(i);
}

運行以上錯誤代碼會報 ConcurrentModificationException 異常。這是由於當使用 foreach(for(Integer i : list)) 語句時,會自動生成一個 Iterator 來遍歷該 list,但同時該list 正在被 Iterator.remove()修改。Java通常不容許一個線程在遍歷Collection 時另一個線程修改它。code

2.3 Iterator 和ListIterator 有什麼區別?
  1. Iterator 能夠遍歷 Set 和 List 集合,而 ListIterator 只能遍歷LIst。
  2. Iterator 只能單向遍歷,而 ListIterator 能夠上雙向遍歷(向前/向後遍歷)
  3. ListIterator 實現 Iterator 接口,而後添加了一些額外的功能,好比添加一個元素、替換一個元素、獲取前面或後面元素的索引位置。
相關文章
相關標籤/搜索