1 如何實作陣列和 List 之間的轉換
1.1 陣列轉List:使用Arrays.asList(array) 進行轉換
1.2 List 轉陣列:使用自帶的 toArray()方法
代碼示例:
//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()方法,如下:
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 時另外一個執行緒修改它,
2.3 Iterator 和ListIterator 有什么區別?
- Iterator 可以遍歷 Set 和 List 集合,而 ListIterator 只能遍歷LIst,
- Iterator 只能單向遍歷,而 ListIterator 可以上雙向遍歷(向前/向后遍歷)
- ListIterator 實作 Iterator 介面,然后添加了一些額外的功能,比如添加一個元素、替換一個元素、獲取前面或后面元素的索引位置,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/209125.html
標籤:其他
