Почему Collection <String>s = новый TreeSet <> (), TreeSet <String>s = новый TreeSet <> () и Set <String>s = новый TreeSet <> () дают такой же результат? - PullRequest
0 голосов
/ 04 апреля 2019

Я не понимаю, почему все три одинаковы. Коллекция - это интерфейс, а TreeSet и Set - это классы.

 public static void main(String[] args) {

        String[] text = {"i", "came", "i", "saw", "i", "left"};

        Set<String> s = new TreeSet<>();    // output = 4 distinct words: [came, i, left, saw]
        // Collection<String>s = new TreeSet<>(); // output = 4 distinct words: [came, i, left, saw]
        // TreeSet<String>s = new TreeSet<>(); // output = 4 distinct words: [came, i, left, saw]
        for(String a: text)
            s.add(a);

            System.out.println(s.size()+" distinct words: "+s);

    }

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Результат один и тот же, потому что все три используют один и тот же класс реализации, равный TreeSet. Поскольку Set и Collection являются родительскими интерфейсами класса TreeSet, вы можете указать на реализацию TreeSet, используя их ссылку. Вот как полиморфизм работает в ООП.

Но хотя ссылка имеет значение Set или Collection, реализация является экземпляром класса TreeSet, который не допускает дублирования и сортирует элементы в соответствии с их определением интерфейса Comparable (естественное упорядочение) , Итак, во всех трех вы видите, что дубликаты устранены.

0 голосов
/ 04 апреля 2019

Это потому, что вы используете одну и ту же реализацию во всех трех случаях и присваиваете ей супертипы.Пожалуйста, посмотрите на полиморфизм .

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