| 
 | |||||||
| Сравнение двух коллкуций 
		  Время создания: 17.03.2021 23:28		  
		    Раздел: INFO - Development - JAVA - Collection		   
		  Запись: wwwlir/Tetra/master/base/1615994883igzeko61t2/text.html на raw.githubusercontent.com		  | |||||||
|  | |||||||
| EDIT Вот две версии. Один использует ArrayList , а другой - HashSet Сравните их и создайте свою собственную версию, пока не получите то, что вам нужно. Этого должно быть достаточно, чтобы покрыть: P.S: это не школьное задание :) так что если вы просто направите меня, этого будет достаточно часть твоего вопроса. продолжая с оригинальным ответом : Для этого вы можете использовать java.util.Collection и/или java.util.ArrayList . Метод retainAll выполняет следующие действия: Сохраняет только те элементы в этой коллекции, которые содержатся в указанной коллекции смотрите этот образец: import java.util.Collection;import java.util.ArrayList;import java.util.Arrays;public class Repeated {    public static void main( String  [] args ) {        Collection listOne = new ArrayList(Arrays.asList("milan","dingo", "elpha", "hafil", "meat", "iga", "neeta.peeta"));        Collection listTwo = new ArrayList(Arrays.asList("hafil", "iga", "binga", "mike", "dingo"));        listOne.retainAll( listTwo );        System.out.println( listOne );    }}EDIT Для второй части (аналогичные значения) вы можете использовать метод removeAll: Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции. Эта вторая версия дает вам также аналогичные значения и обрабатывает повторные ( отбрасывая их). На этот раз Collection может быть Set вместо List ( разница в том, что набор не допускает повторения значений ) import java.util.Collection;import java.util.HashSet;import java.util.Arrays;class Repeated {      public static void main( String  [] args ) {          Collection<String> listOne = Arrays.asList("milan","iga",                                                    "dingo","iga",                                                    "elpha","iga",                                                    "hafil","iga",                                                    "meat","iga",                                                     "neeta.peeta","iga");          Collection<String> listTwo = Arrays.asList("hafil",                                                     "iga",                                                     "binga",                                                      "mike",                                                      "dingo","dingo","dingo");          Collection<String> similar = new HashSet<String>( listOne );          Collection<String> different = new HashSet<String>();          different.addAll( listOne );          different.addAll( listTwo );          similar.retainAll( listTwo );          different.removeAll( similar );          System.out.printf("One:%s%nTwo:%s%nSimilar:%s%nDifferent:%s%n", listOne, listTwo, similar, different);      }}Выход: $ java RepeatedOne:[milan, iga, dingo, iga, elpha, iga, hafil, iga, meat, iga, neeta.peeta, iga]Two:[hafil, iga, binga, mike, dingo, dingo, dingo]Similar:[dingo, iga, hafil]Different:[mike, binga, milan, meat, elpha, neeta.peeta]Если он не делает именно то, что вам нужно, это дает вам хороший старт, так что вы можете справиться с этим отсюда. Вопрос для читателя: как бы вы включили все повторяющиеся значения? OscarRyz 04 мая 2010 в 00:50 
 Вы можете попробовать методы intersection() и subtract() из CollectionUtils . Метод intersection() дает вам коллекцию, содержащую общие элементы, а метод subtract() дает вам все необычные. Они также должны заботиться о подобных элементах Mihir Mathuria 04 мая 2010 в 01:03 
 Действительно ли это списки (упорядоченные, с дубликатами) или наборы (неупорядоченные, без дубликатов)? Потому что если это последнее, то вы можете использовать, скажем, a java.util.HashSet<E> и сделать это в ожидаемое линейное время, используя удобный retainAll .     List<String> list1 = Arrays.asList(        "milan", "milan", "iga", "dingo", "milan"    );    List<String> list2 = Arrays.asList(        "hafil", "milan", "dingo", "meat"    );    // intersection as set    Set<String> intersect = new HashSet<String>(list1);    intersect.retainAll(list2);    System.out.println(intersect.size()); // prints "2"    System.out.println(intersect); // prints "[milan, dingo]"    // intersection/union as list    List<String> intersectList = new ArrayList<String>();    intersectList.addAll(list1);    intersectList.addAll(list2);    intersectList.retainAll(intersect);    System.out.println(intersectList);    // prints "[milan, milan, dingo, milan, milan, dingo]"    // original lists are structurally unmodified    System.out.println(list1); // prints "[milan, milan, iga, dingo, milan]"    System.out.println(list2); // prints "[hafil, milan, dingo, meat]"polygenelubricants 04 мая 2010 в 00:49 
 большинство ответов, которые я видел здесь, в основном охватывают проблему логического значения true/false при сравнении списков. Что меня интересует, так это сравнение двух списков и наблюдение за изменением значения между этими двумя списками. Другими словами, у меня есть список и список; у них... Я использую xunit для модульного тестирования, у меня есть список ожидаемых объектов и список реальных объектов. Как сравнить конкретный элемент каждого объекта (дату) в обоих списках, чтобы увидеть, равны ли они? Я нашел метод Assert.Collection, но не могу понять, как он может сравнивать... 
 Использование java 8 removeIf public int getSimilarItems(){    List<String> one = Arrays.asList("milan", "dingo", "elpha", "hafil", "meat", "iga", "neeta.peeta");    List<String> two = new ArrayList<>(Arrays.asList("hafil", "iga", "binga", "mike", "dingo")); //Cannot remove directly from array backed collection    int initial = two.size();    two.removeIf(one::contains);    return initial - two.size();} | |||||||
| 
 Так же в этом разделе:
  
 | |||||||
|   | |||||||
| 
 | |||||||
| 
 |