次のコードの出力を答えてください。
変数は、以降の問題に引き継いでいくと考えてください。
問1
List<Integer> list = new ArrayList<>(Arrays.asList(0, 1, 2, 4));
List<Integer> list2 = new ArrayList<>(Arrays.asList(1, 3));
System.out.println(list.add(5));
System.out.println(list);
問1の解答
true
[0, 1, 2, 4, 5]
問2
System.out.println(list.addAll(list2));
System.out.println(list);
問2の解答
true
[0, 1, 2, 4, 5, 1, 3]
問3
System.out.println(list.add(1, 2));
System.out.println(list);
問3の解答
戻り値voidなのでコンパイルエラーvoid add(int index, E element)
コンパイルエラーが発生した操作の要素の変化は無視してください。
問4
System.out.println(list.set(2, 10));
System.out.println(list);
問4の解答
2
[0, 1, 10, 4, 5, 1, 3]
問5
System.out.println(list.remove(1));
System.out.println(list);
問5の解答
1
[0, 10, 4, 5, 1, 3]
Listインターフェイスで独自に定義されたE remove(int index)
は要素のインデックス番号がindexの要素を取り除き、返します。
Collectionインターフェイスのboolean remove(Object obj)
では要素そのものを取り除きます。
問題では、removeメソッドの引数の型がint型です。
ListインターフェイスのE remove(int index)
が呼び出されます。
問6
System.out.println(list.remove(Integer.valueOf(3)));
System.out.println(list);
問6の解答
true
[0, 10, 4, 5, 1]
問7
System.out.println(list.removeAll(list2));
System.out.println(list);
問7の解答
true
[0, 10, 4, 5]
問8
System.out.println(list.retainAll(list2));
System.out.println(list);
問8の解答
true
[]
問9
System.out.println(list.clear());
問9の解答
voidなのでコンパイルエラー問10
System.out.println(list.isEmpty());
問10の解答
true
問11
System.out.println(list.remove(1));
問11の解答
java.lang.IndexOutOfBoundsException
がスローされる
初期化
SortedSet<Integer> set = new TreeSet<>(Arrays.asList(0, 1, 2, 3, 4));
問12
System.out.println(set.add(0));
問12の解答
false
問13
System.out.println(set.first());
問13の解答
0
問14
System.out.println(set.last());
System.out.println(set);
問14の解答
4
[0, 1, 2, 3, 4]
問15
System.out.println(set.tailSet(1));
System.out.println(set.headSet(1));
問15の解答
[1, 2, 3, 4]
[0]
問16
System.out.println(set.subSet(0, 2));
System.out.println(set);
問16の解答
[0, 1]
[0, 1, 2, 3, 4]
問17
System.out.println(set.contains(4));
問17の解答
true
問18
Set<Integer> set2 = new TreeSet<>(Arrays.asList(2, 3));
System.out.println(set.containsAll(set2));
問18の解答
true
初期化
Queue<Integer> que = new LinkedList<>(Arrays.asList(0, 1, 2));
問19
System.out.println(que.add(3));
問19の解答
true
問20
System.out.println(que.offer(4));
System.out.println(que);
問20の解答
true
[0, 1, 2, 3, 4]
問21
System.out.println(que.remove());
System.out.println(que);
問21の解答
0
[1, 2, 3, 4]
問22
System.out.println(que.remove(2));
System.out.println(que);
問22の解答
true
[1, 3, 4]
Listインターフェイスと異なり、QueueインターフェイスではE remove(int index)
は定義されていない。
そのため、Collectionインターフェイスのboolean remove(Object obj)
が適用されるため注意。
問23
System.out.println(que.element());
System.out.println(que);
問23の解答
1
[1, 3, 4]
問24
System.out.println(que.poll());
System.out.println(que);
問24の解答
1
[3, 4]
問25
System.out.println(que.peek());
System.out.println(que);
問25の解答
3
[3, 4]
問26
que.clear();
System.out.println(que.poll());
問26の解答
null
問27
System.out.println(que.peek());
問27の解答
null
問28
System.out.println(que.element());
問28の解答
NoSuchElementException
がスローされる。
問29
System.out.println(que.remove());
問29の解答
NoSuchElementException
がスローされる。
初期化
Deque<Integer> dque = new LinkedList<>(Arrays.asList(0, 1, 2, 3));
問30
System.out.println(dque.offer(4));
System.out.println(dque);
問30の解答
true
[0, 1, 2, 3, 4]
問31
System.out.println(dque.addLast(4));
System.out.println(dque);
問31の解答
void addLast(Integer e)
戻り値voidのためコンパイルエラー
問32
dque.addLast(4);
System.out.println(dque);
問32の解答
[0, 1, 2, 3, 4, 4]
問33
dque.addFirst(3);
System.out.println(dque);
問33の解答
[3, 0, 1, 2, 3, 4, 4]
問34
System.out.println(dque.removeFirst());
System.out.println(dque);
問34の解答
3
[0, 1, 2, 3, 4, 4]
問35
System.out.println(dque.removeLast());
System.out.println(dque);
問35の解答
4
[0, 1, 2, 3, 4]
問36
System.out.println(dque.pollFirst());
問36の解答
0
問37
System.out.println(dque.pollLast());
System.out.println(dque);
問37の解答
4
[1, 2, 3]
問38
System.out.println(dque.getFirst());
問38の解答
1
問39
System.out.println(dque.getLast());
System.out.println(dque);
問39の解答
3
[1, 2, 3]
問40
System.out.println(dque.peekFirst());
問40の解答
1
問41
System.out.println(dque.peekLast());
System.out.println(dque);
問41の解答
3
[1, 2, 3]
問42
dque = new LinkedList<>(Arrays.asList(0, 1, 2, 0, 1, 2, 0, 3, 2, 1));
System.out.println(dque.removeFirstOccurrence(1));
System.out.println(dque);
問42の解答
true
[0, 2, 0, 1, 2, 0, 3, 2, 1]
問43
System.out.println(dque.removeLastOccurrence(2));
System.out.println(dque);
問43の解答
true
[0, 2, 0, 1, 2, 0, 3, 1]
問44
dque.clear();
System.out.println(dque.pollFirst());
問44の解答
null
問45
System.out.println(dque.pollLast());
問45の解答
null
問46
System.out.println(dque.peekFirst());
問46の解答
null
問47
System.out.println(dque.peekLast());
問47の解答
null
問48
System.out.println(dque.removeFirstOccurrence(1));
問48の解答
false
問49
System.out.println(dque.removeFirst());
問49の解答
java.util.NoSuchElementException
がスローされる
問50
System.out.println(dque.getFirst());
問50の解答
`java.util.NoSuchElementException`がスローされる初期化
NavigableSet<Integer> set = new TreeSet<>(Arrays.asList(30, 10, 20, 40));
問51
System.out.println(set.poll());
set.poll();
問51の解答
NavigableSet
にはpoll()
メソッドが存在しないためコンパイルエラー
問52
System.out.println(set.pollFirst());
System.out.println(set);
問52の解答
10
[20, 30, 40]
問53
System.out.println(set.lower(30));
System.out.println(set);
問53の解答
20
[20, 30, 40]
問54
System.out.println(set.floor(30));
System.out.println(set);
問54の解答
30
[20, 30, 40]
問55
System.out.println(set.ceiling(31));
System.out.println(set);
問55の解答
40
[20, 30, 40]
問56
System.out.println(set.higher(30));
System.out.println(set);
問56の解答
40
[20, 30, 40]
問57
System.out.println(set.higher(40));
System.out.println(set);
問57の解答
null
[20, 30, 40]
問58
System.out.println(set.descendingSet());
System.out.println(set);
問58の解答
[40, 30, 20]
[20, 30, 40]
問59
System.out.println(set.headSet(30));
問59の解答
[20]
問60
System.out.println(set.tailSet(30));
問60の解答
[30, 40]
問61
System.out.println(set.subSet(20, 30));
System.out.println(set);
問61の解答
[20]
[20, 30, 40]
問62
System.out.println(set.subSet(20, true, 30, true));
問62の解答
[20, 30]
問63
初期化
Map<Integer, String> treeMap = new TreeMap<>();
int[] keys = {30, 10, 20, 40};
String[] values = {"A", "B", "C", "D"};
for (int i = 0; i < keys.length; i++) {
treeMap.put(keys[i], values[i]);
}
System.out.println(treeMap);
問64の解答
{10=B, 20=C, 30=A, 40=D}
問65
System.out.println(treeMap.put(10, "E"));
System.out.println(treeMap);
問65の解答
B
{10=E, 20=C, 30=A, 40=D}
問66
System.out.println(treeMap.get(20));
問66の解答
C
問67
System.out.println(treeMap.contains(10));
問67の解答
Mapにcontains(K)
メソッドは存在しないため、コンパイルエラー
問68
System.out.println(treeMap.containsKey(10));
System.out.println(treeMap);
問68の解答
true
{10=E, 20=C, 30=A, 40=D}
問69
System.out.println(linkedHashMap.containsValue("B"));
問69の解答
false
問70
System.out.println(treeMap.putIfAbsent(50, "F"));
System.out.println(treeMap.putIfAbsent(50, "G"));
System.out.println(treeMap);
問70の解答
null
F
{10=E, 20=C, 30=A, 40=D, 50=F}
問71
System.out.println(treeMap.compute(30, (k, v) -> v + "aaa"));
System.out.println(treeMap);
問71の解答
Aaaa
{10=E, 20=C, 30=Aaaa, 40=D, 50=F}
問72
System.out.println(treeMap.computeIfAbsent(10, k -> "bbb"));
System.out.println(treeMap.computeIfAbsent(60, k -> "bbb"));
System.out.println(treeMap);
問72の解答
E
bbb
{10=E, 20=C, 30=Aaaa, 40=D, 50=F, 60=bbb}
問73
System.out.println(treeMap.computeIfPresent(10, (k, v) -> v + "ccc"));
System.out.println(treeMap.computeIfPresent(10, (k, v) -> v + "ddd"));
System.out.println(treeMap);
問73の解答
Eccc
Ecccddd
{10=Ecccddd, 20=C, 30=Aaaa, 40=D, 50=F, 60=bbb}
問74
System.out.println(treeMap.merge(20, " merge", (v1, v2) -> v1 + v2));
System.out.println(treeMap);
問74の解答
C merge
{10=Ecccddd, 20=C merge, 30=Aaaa, 40=D, 50=F, 60=bbb}
問75
TreeMap<Integer, String> treeMap2 = new TreeMap<>();
int[] keys2 = {30, 10, 20, 40};
String[] values2 = {"A", "B", "C", "D"};
for (int i = 0; i < keys2.length; i++) {
treeMap2.put(keys2[i], values2[i]);
}
System.out.println(treeMap2.entrySet());
問75の解答
[10=B, 20=C, 30=A, 40=D]
問76
System.out.println(treeMap2.remove(10));
System.out.println(treeMap2.remove(10));
System.out.println(treeMap2);
問76の解答
B
null
{20=C, 30=A, 40=D}
問77
System.out.println(treeMap2.keySet());
問77の解答
[20, 30, 40]
問78
System.out.println(treeMap2.clear());
問78の解答
clear()
メソッドの戻り値はvoidなのでコンパイルエラー
問79
System.out.println((treeMap2).firstEntry());
問79の解答
20=C
問80
System.out.println(treeMap2.firstKey());
System.out.println(treeMap2.lastKey());
System.out.println(treeMap2);
問80の解答
20
40
{20=C, 30=A, 40=D}
問81
System.out.println(treeMap2.floorEntry(30));
System.out.println(treeMap2.floorEntry(25));
System.out.println(treeMap2);
問81の解答
30=A
20=C
{20=C, 30=A, 40=D}
問82
System.out.println(treeMap2.headMap(40));
System.out.println(treeMap2);
問82の解答
{20=C, 30=A}
{20=C, 30=A, 40=D}
問83
System.out.println(treeMap2.tailMap(30));
System.out.println(treeMap2);
問83の解答
{30=A, 40=D}
{20=C, 30=A, 40=D}
問84
Map<Integer, String> linkedHashMap = new LinkedHashMap<>();
int[] keys = {30, 10, 20, 40};
String[] values = {"A", "B", "C", "D"};
for (int i = 0; i < keys.length; i++) {
linkedHashMap.put(keys[i], values[i]);
}
System.out.println(linkedHashMap);
問84の解答
{30=A, 10=B, 20=C, 40=D}
問85
System.out.println(linkedHashMap.values());
問85の解答
[A, B, C, D]
問86
これ以降、各問題の変数は引き継がないものとして考えてください。
Collection<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
list.removeAll(Arrays.asList("B", "D", "E"));
System.out.println(list);
問86の解答
[A, C]
問87
Collection<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.clear();
System.out.println(list.isEmpty());
問87の解答
true
問88
Queue<String> queue = new LinkedList<>(Arrays.asList("first", "second", "third"));
queue.add("fourth");
queue.poll();
queue.offer("fifth");
queue.remove("third");
System.out.println(queue);
問88の解答
[second, fourth, fifth]
問89
Collection<Integer> set = new HashSet<>(Arrays.asList(1, 2, 3, 4));
set.retainAll(Arrays.asList(2, 4, 6));
System.out.println(set);
問89の解答
[2, 4]
問90
Collection<String> list = new LinkedList<>(Arrays.asList("X", "Y", "Z"));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String value = iterator.next();
if (value.equals("Y")) {
iterator.remove();
}
}
System.out.println(list);
問90の解答
[X, Z]
問91
Collection<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.addAll(Arrays.asList(4, 5));
list.removeIf(n -> n % 2 == 0);
System.out.println(list);
問91の解答
[1, 3, 5]
問92
Collection<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3));
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer value = iterator.next();
if (value > 1) {
iterator.remove();
}
}
System.out.println(list);
問92の解答
1
問93
Collection<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
list.removeIf(s -> "B".equals(s));
System.out.println(list);
問93の解答
[A, C, D]
問94
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> subList = list.subList(1, 4);
subList.replaceAll(n -> n * 2);
System.out.println(list);
問94の解答
[1, 4, 6, 8, 5]
問95
Collection<String> list = new LinkedList<>(Arrays.asList("alpha", "beta", "gamma"));
ListIterator<String> iterator = ((LinkedList<String>)list).listIterator(1);
iterator.next();
iterator.set("delta");
System.out.println(list);
問95の解答
[alpha, delta, gamma]
問96
Collection<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
List<String> subList = ((ArrayList<String>)list).subList(1, 3);
subList.clear();
System.out.println(list);
問96の解答
[A]
問97
Collection<Integer> set = new HashSet<>(Arrays.asList(1, 2, 3));
set.add(null);
boolean result = set.removeIf(Objects::isNull);
System.out.println(result);
System.out.println(set);
問97の解答
true
[1, 2, 3]
問98
Collection<String> list = new ArrayList<>(Arrays.asList("X", "Y", "Z"));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String value = iterator.next();
list.remove(value);
}
System.out.println(list);
問98の解答
イテレータでリストをループしている最中に直接リストの要素を変更すると ConcurrentModificationExceptionがスローされる問99
Collection<Integer> set = new TreeSet<>(Arrays.asList(5, 3, 1, 4, 2));
NavigableSet<Integer> subSet = ((TreeSet<Integer>)set).subSet(2, true, 4, true);
subSet.add(3);
System.out.println(subSet);
System.out.println(set);
問99の解答
[2, 3, 4]
[1, 2, 3, 4, 5]
問100
Collection<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
list.removeIf(s -> list.add("E"));
System.out.println(list);
問100の解答
s -> list.add("E")がリストに対して変更を加えるため、removeIfメソッドが実行中にリストが変更されることになります そのためConcurrentModificationExceptionがスローされますDocument
Collection
Map