2016-05-03 3 views
-1

Я нашел следующий пример, который печатает сходства между двумя списками. На самом деле я хочу только вернуть true, если оба списка имеют одинаковые значения или false в противном случае. Например, следующий код должен вернуть return false.Возвращаемое логическое значение для сравнения двух списков

public static void main(String[] args) { 
    List<Integer> list1 = Arrays.asList(1, 2, 3, 4); 
    List<Integer> list2 = Arrays.asList(1, 2); 

    Set<Integer> similar = new HashSet<Integer>(list1); 
    similar.retainAll(list2); 
    System.out.println("Similar " + similar); 
} 
+2

Что вы подразумеваете под _return_? Вы хотите переместить все это в метод, имеющий возвращаемый тип 'boolean' и' return' значение 'boolean', соответствующее результату сравнения? Что мешает вам это делать? –

+0

Кроме того, вы рассматриваете порядок, дубликаты и т. Д.? –

+0

Возможно, вы хотите: 'System.out.println (« Similar »+ Similar.retainAll (list2));' – brso05

ответ

1

Вы должны использовать List.equals:

public class HelloWorld{ 

    public static void main(String[] args) { 
    List<Integer> list1 = Arrays.asList(1, 2, 3, 4); 
    List<Integer> list2 = Arrays.asList(1, 2); 
    boolean test = list1.equals(list2); 
    System.out.println("Similar " + test); 
} 
} 

Так, equals от List будет проверять два списка равны полными условиями, одинакового размера и с одинаковыми значениями в этом и на том же самом положении. То, что вы сделали с HashSet, будет проверять только, является ли один список подмножеством другого списка. Однако, если list1 является подмножеством list2 и list2 является подмножеством list1, они равны (по математике). Но, List.equals() быстрее, и вам нужно меньше памяти, а затем создайте два Sets и выполните операции поднабора.

Однако {1,2,3} равно {1,2,3} но не {1,3,2} с точки зрения List.equals. Если вы хотите {1,2,3} быть равно {1,3,2} и {1,3,2,1,3} то вы делаете это с Sets:

public class HelloWorld{ 

    public static void main(String[] args) { 
    List<Integer> list1 = Arrays.asList(1, 2, 3, 4); 
    List<Integer> list2 = Arrays.asList(1, 2); 

    Set<Integer> similar2 = new HashSet<Integer>(list2); 
    Set<Integer> similar1 = new HashSet<Integer>(list1); 
    boolean test = similar1.equals(similar2); 
    System.out.println("Similar " + test); 
} 
} 

Set.equals работа разные, то List.equals, так как он проверяет, если каждый элемент в similar1 существует в similar2 (итерация), это Безразлично Не заботьтесь о заказе. (Спасибо @ brso05 за указание на это).

+0

Большое спасибо. Этот пример выводит true, но должен печатать false, потому что два списка не совпадают. Я хочу вернуть true, когда точно оба списка имеют одинаковые номера, а также одинаковый размер. Я немного застрял за это. – Jacki

+0

Благодарим за отзыв. – Jacki

+0

обновил мой ответ. –