测试题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 接口,而后添加了一些额外的功能,好比添加一个元素、替换一个元素、获取前面或后面元素的索引位置。
相关文章
相关标签/搜索