Различия между двумя целочисленными коллекциями - PullRequest
2 голосов
/ 23 декабря 2010

У меня есть два набора целых чисел (то есть первое: 2,3,4,5, а второе - 1,2,3,6).Как найти массив сложенных чисел (1,6) и массив вычитаемых чисел (4,5)?Я сказал коллекцию, но я держу их в Сете, но если у вас есть другие идеи, я тоже могу их использовать.Я также буду хранить числа сложения и вычитаемые числа в разных коллекциях.

Ответы [ 3 ]

6 голосов
/ 23 декабря 2010

Полагаю, вы имеете в виду элементы в одном наборе, а не в другом.

Set<Integer> first = new LinkedHashSet<Integer>(Arrays.asList(2,3,4,5));
Set<Integer> second = new LinkedHashSet<Integer>(Arrays.asList(1,2,3,6));
Set<Integer> addition = subtract(first, second);
Set<Integer> subtracted = subtract( second, first);

public static <T> Set<T> subtract(Set<T> set1, Set<T> set2) {
    Set<T> ret = new LinkedHashSet<T>(set1);
    ret.removeAll(set2);
    return ret;
}
4 голосов
/ 23 декабря 2010

Не уверен, что вам это нужно, но вы можете использовать google guava для этого:

import java.util.HashSet;
import java.util.Set;

import com.google.common.collect.Sets;


public class NumbersTest {

    public static void main(String[] args) {
        Set<Integer> set1 = new HashSet<Integer>(){{add(2);add(3);add(4);add(5);}};
        Set<Integer> set2 = new HashSet<Integer>(){{add(1);add(2);add(3);add(6);}};
        System.out.println("Nums Unique to set1: " + Sets.difference(set1, set2));
        System.out.println("Nums Unique to set2: " + Sets.difference(set2, set1));
    }
}

Выходы:

Nums Unique to set1: [4, 5]
Nums Unique to set2: [1, 6]
1 голос
/ 23 декабря 2010

Определенно не лучшее решение, но хотя ..

public class IntsFind {
public static void main(String[] args) {
    List<Integer> first = Arrays.asList(2, 3, 4, 5);
    List<Integer> second = Arrays.asList(1, 3, 4, 6);

    List<Integer> missing = new LinkedList<Integer>();
    List<Integer> added = new LinkedList<Integer>(second);

    for (Integer i : first) {
        if (!added.remove(i)) {
            missing.add(i);
        }
    }

    System.out.println("Missing ints in second: " + missing);
    System.out.println("New ints in second: " + added);
}

}

Отпечатки:

Недостающие числа в секундах: [2, 5]Новые числа в секунду: [1, 6]

РЕДАКТИРОВАТЬ Нет необходимости оборачивать Arrays.asList, как указано @Peter Lawrey

...