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