Какую коллекцию использовать здесь - PullRequest
1 голос
/ 03 марта 2011

Мне интересно, какую коллекцию мне следует использовать для этой цели:

Требования

  1. Должны содержать кортежи <value1,value2>
  2. Между этими значениями нет связи (без пар ключ-значение)
  3. Может содержать только уникальные кортежи
  4. <value1,value2> равно <value2,value1>

Чтобыло бы лучше использовать здесь?

Ответы [ 3 ]

10 голосов
/ 03 марта 2011

Используйте любой набор (например, HashSet).Создайте объект, представляющий ваш кортеж, и реализуйте хеш-код и равны ему правильно.

2 голосов
/ 03 марта 2011

Реализуйте свой собственный класс кортежей с равно и hashCode , как описано ниже, затем используйте Set :

public class Tuple<T> {
    T v1;
    T v2;

    @override
    public boolean equals(Object o) {
        if (o == null) {
            return false;
        }
        if (o instanceof Tuple) {
            return (v1.equals(o.v1) && v2.equals(o.v2))
                   || (v1.equals(o.v2) && v2.equals(o.v1));
        }
        return false;
    }

    @override
    public int hashCode() {
        // must produce a.hashCode() == b.hashCode() if a.equals(b)
        // example below may or may not work for your concrete equals()
        return v1.hashCode() ^ v2.hashCode();
    }
}
1 голос
/ 03 марта 2011

A Set соответствует вашим критериям. Набор должен содержать другую коллекцию или пользовательский объект, содержащий два значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...