Создайте метод возврата, который принимает массив int и возвращает упорядоченный и не дублированный массив int в java - PullRequest
0 голосов
/ 13 июля 2020

Дано и массив int; int [] arr = {1, 2, 5, 8, 9, 10, 20, 80, 9, 0, 100, 90, 30, 55, 22, 87, 88, 22, 33, 22, 1, 2, 3};

Требование: требование: есть массив без сортировки и с дубликатами. создал метод, который может принимать int [], и после упорядочивания и удаления дубликатов вернуть его как int [] ...

Мое решение обработки:

static void removingDups4(int[] arr) {

    LinkedHashSet<Integer> setDups = new LinkedHashSet(Arrays.asList(arr));

    for (int each : arr) {
        setDups.add(each);
    }

    System.out.println(setDups);

    int[] newArr = new int[setDups.size()];
    int i = 0;
    while (i < setDups.size()) {

        for (int each : setDups) {
            newArr[i] +=  each;
            i++;
        }
        System.out.println(newArr);

    }

}

output:

[[I@77459877, 0, 1, 2, 3, 5, 8, 9, 10, 20, 22, 30, 33, 55, 80, 87, 88, 90, 100] Exception in thread "main" java.lang.ClassCastException: class [I cannot be cast to class java.lang.Integer ([I and java.lang.Integer are in module java.base of loader 'bootstrap')    at SearchingAnElementFromArray_BinarySearch.removingDups4(SearchingAnElementFromArray_BinarySearch.java:86)     at Array.SearchingAnElementFromArray_BinarySearch.main(SearchingAnElementFromArray_BinarySearch.java:12)

Process finished with exit code 1

Ответы [ 3 ]

2 голосов
/ 13 июля 2020

Это один из способов (требуется Java8 +):

public static int[] sortIntArrayNoDups(int[] array) {
    int[] tmp = java.util.stream.IntStream.of(array).distinct().toArray();
    Arrays.sort(tmp);
    return tmp;
}

Для использования:

int[] arr = {1, 2, 5, 8, 9, 10, 20, 80, 9, 0,
             100, 90, 30, 55, 22, 87, 88, 22, 
             33, 22, 1, 2, 3};
arr = sortNoDups(arr);
System.out.println(Arrays.toString(arr));

Вывод:

[0, 1, 2, 3, 5, 8, 9, 10, 20, 22, 30, 33, 55, 80, 87, 88, 90, 100]
2 голосов
/ 13 июля 2020

Использование Java -8:

static int[] removingDups4(int[] arr) {
    return 
        new ArrayList<>(
            Arrays
            .stream(arr)       // Generating a stream of the `int` values held in the array.
            .boxed()           // Auto-boxing `int` primitives to `Integer` objects.
            .collect( Collectors.toCollection(TreeSet::new) )  // Passing the `Integer` objects into a `TreeSet` to (a) eliminate duplicates, and (b) sort them.
        )
        .stream()
        .mapToInt(i -> i)
        .toArray();
}

В основном размещение чисел в Set удалит дубликаты.

И используя SortedSet / NavigableSet например, TreeSet также отсортирует числа.

См. Этот код , запускаемый в реальном времени на IdeOne.com .

        int[] input = { 8 , 6 , 7 , 5 , 3, 0 , 9 , 8 };  // Repeating `8` at beginning and end. 
        int[] result = removingDups4( input ) ;
        System.out.println( Arrays.toString( result ) ) ;

[0, 3, 5, 6, 7, 8, 9]

0 голосов
/ 13 июля 2020

Вместо использования LinkedHashSet вы можете использовать TreeSet, который сортирует элементы в порядке возрастания и автоматически удаляет дубликаты. Затем вы можете преобразовать TreeSet в массив объектов с помощью метода toArray (), а затем преобразовать его в целочисленный массив и вернуть его. Я не помещаю здесь код, потому что это легко понять.

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