-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSolution.java
More file actions
100 lines (70 loc) · 2.88 KB
/
Solution.java
File metadata and controls
100 lines (70 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
//Saying, We give thee thanks, O Lord God Almighty, which art, and wast, and art to come; because thou hast taken to thee thy great power, and hast reigned. (Revelation 11:17)
package com.javarush.task.task37.task3701;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.function.Consumer;
/*
Круговой итератор
*/
public class Solution<T> extends ArrayList<T> {
public static void main(String[] args) {
Solution<Integer> list = new Solution<>();
list.add(1);
list.add(2);
list.add(3);
int count = 0;
for (Integer i : list) {
//1 2 3 1 2 3 1 2 3 1
System.out.print(i + " ");
count++;
if (count == 10) {
break;
}
}
}
public class RoundIterator implements Iterator<T> {
Iterator<T> iterator = Solution.super.iterator();
int cursor = 0;
@Override
public boolean hasNext() {
if (size() == 0)
return false;
if (cursor >= size()) {
iterator = Solution.super.iterator();
cursor = 0;
}
return true;
}
@Override
public T next() {
cursor++;
return iterator.next();
}
@Override
public void remove() {
iterator.remove();
}
@Override
public void forEachRemaining(Consumer<? super T> action) {
iterator.forEachRemaining(action);
}
}
@Override
public Iterator<T> iterator() {
return new RoundIterator();
}
}
/*
Круговой итератор
Класс Solution наследуется от ArrayList.
Перегрузи правильным образом метод iterator в классе Solution.
Напишите свой класс RoundIterator внутри Solution, который будет итератором для списка Solution.
Итератор должен ходить по кругу по всем элементам.
В остальном поведение должно быть идентичным текущему итератору.
Требования:
1. Круговой итератор должен после последнего элемента переходить на первый и так далее.
2. Метод remove без параметров должен удалять текущий элемент.
3. При некорректной модификации списка из разных потоков должно возникать исключение ConcurrentModificationException.
4. Класс Solution должен быть потомком класса ArrayList.
5. Метод iterator() в классе Solution должен возвращать объект типа RoundIterator.
*/