平時最經常使用的莫過於ArrayList
和HashMap
了,面試的時候也是問答的常客。先不去管容量、負載因子什麼的,就是簡單的使用也會遇到坑。java
常常遇到的一個場景是:遍歷list, 而後找到合適條件的給刪除掉,好比刪除全部的偶數。面試
@Test public void testRemove2(){ List<Integer> integers = new ArrayList<>(5); integers.add(1); integers.add(2); integers.add(2); integers.add(4); integers.add(5); for (int i = 0; i < integers.size(); i++) { if (integers.get(i)%2==0){ integers.remove(i); } } System.out.println(integers); }
看起來好像沒問題,加入面試的時候當面問:輸出結果是什麼?再問真不會報錯嗎?再問結果是什麼?性能
public E remove(int index)
,一個是public boolean remove(Object o)
,那下面的結果是什麼:@Test public void testRemove(){ ArrayList<Integer> integers = Lists.newArrayList(1, 2, 3, 4); System.out.println(integers); integers.remove(1); System.out.println(integers); }
@Test public void testRemove3(){ List<String> list = Arrays.asList("a","b"); list.add("c"); System.out.println(list); }
@Test public void testRemove4(){ List<String> strings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add("d"); for (String string : strings) { strings.remove(string); } }
@Test public void testRemove5(){ List<String> strings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add("d"); int size = strings.size(); for (int i = 0; i < size; i++) { strings.remove(i); } }
@Test public void testRemove6(){ List<String> strings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add("d"); Iterator<String> iterator = strings.iterator(); while (iterator.hasNext()){ String next = iterator.next(); strings.remove(next); } System.out.println(strings); }
@Test public void testRemove7(){ List<String> strings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add("d"); Iterator<String> iterator = strings.iterator(); while (iterator.hasNext()){ String next = iterator.next(); iterator.remove(); } System.out.println(strings); }