0
0

Java Collection ・Map 例題 100本ノック

Last updated at Posted at 2024-08-19

次のコードの出力を答えてください。

変数は、以降の問題に引き継いでいくと考えてください。

問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]
subListメソッドで取得したサブリストに対してreplaceAllメソッドを呼び出すと、そのサブリストに対する変更が元のリストにも反映されます。

問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]
listIterator(1)はインデックス1の要素("beta")を指すリストイテレータを作成します。次に、iterator.set("delta")で"beta"を"delta"に置き換えます。

問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]
subList(1, 3)はインデックス1から2の範囲のサブリストを返します。subList.clear()はそのサブリストを空にし、オリジナルのリストからも要素"B"と"C"が削除されます。

問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]
removeIf(Objects::isNull)は、null要素を削除します。nullが存在するため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]
NavigableSet.subSet(2, true, 4, true)で得られるサブセットには、2から4までの要素が含まれます。

問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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0