Получение несортированного набора при создании его из отсортированного массива с двойственностью - PullRequest
0 голосов
/ 05 марта 2020

Я беру отсортированный массив с некоторыми повторяющимися значениями, а затем, чтобы просто удалить дублирование, добавляю каждое значение в набор. Когда я создаю набор из отсортированного массива, почему я не получаю отсортированный набор?

Вот мой код:

Set<Integer> set = new HashSet<Integer>();

    for(int score: scores) 
        if(!(set.contains(score)))
            set.add(score);

    System.out.println(set);

Значение оценки: 100 100 50 40 40 20 10

Ожидаемый результат: [100, 50, 40, 20, 10]

Фактический результат: [50, 100, 20, 40, 10]

Ответы [ 3 ]

2 голосов
/ 05 марта 2020

Я вижу, вы делаете if(!(set.contains(score))) это сравнение. Тогда почему бы не go для списка? Список будет поддерживать порядок вставки.

int scores[]= {100,100,50,40,40,20,10};
        List<Integer> list=new ArrayList<Integer>();

        for(int score: scores) 
            if(!(list.contains(score)))
                list.add(score);

        System.out.println(list);
    }

Вывод ::

[100, 50, 40, 20, 10]

0 голосов
/ 05 марта 2020

Вы можете объединить интерфейс SortedSet с Collections.reverseOrder () , чтобы получить набор в обратном порядке, как показано ниже:

int[] scores = new int[]{100, 100, 50, 40, 40, 20, 10};
SortedSet<Integer> set = new TreeSet<>(Collections.reverseOrder());
for (int score : scores) { 
    set.add(score);
}
System.out.println(set); //<--it will print [100, 50, 40, 20, 10]
0 голосов
/ 05 марта 2020

Если вы хотите отсортировать набор, используйте TreeSet. TreeSet - это реализация сортированного набора, заданная по умолчанию Java. Больше информации в официальной документации https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html

Set<Integer> set = new TreeSet<Integer>();

for(int score: scores) 
    //if(!(set.contains(score))) # this is not needed as set already handles duplicates
        set.add(score);

System.out.println(set);
...