public static boolean listsEquals CycledList list1 CycledList list2 It

 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
public static <E> boolean listsEquals(CycledList<E> list1, CycledList<E> list2) {
Iterator<E> iter = join(list1.iterator(), list1.iterator());
// Если различной длины, то завершаемся
if (!hasSameLength(list1, list2))
return false;
// Оба пустые, ответ очевиден
if (!iter.hasNext())
return true;
while (iter.hasNext()) {
Iterator<E> iter2 = list2.iterator();
// Сравниваем два набора
if (compare(iter, iter2))
return true;
}
return false;
}
/**
* Сравнение двух наборов данных.
* Вспомогательный метод для listsEquals()
* @return true, если iter2 есть включение iter1
*/
private static <T> boolean compare(Iterator<T> iter1, Iterator<T> iter2) {
while (iter2.hasNext()) {
// Первый набор внезапно закончился
if (!iter1.hasNext())
return false;
// Элементы различаются
if (!iter1.next().equals(iter2.next()))
return false;
}
return true;
}