/ / Додайте новий рядок наприкінці колекції - java, generics, сортування, хешсет

Додайте нову лінію в кінці колекції - java, generics, sorting, hashset

Я хотів би використовувати несортовану загальну колекцію для зберігання значень.

Set<Integer> map = new HashSet<Integer>();
map.Add( new Integer( 3 ) );
map.Add( new Integer( 2 ) );
map.Add( new Integer( 4 ) );
map.Add( new Integer( 1 ) );

Я припускаю, що елементи були б 3,2,4,1. Тоді я хотів би створити масив із цього набору:

Integer[] arr = ( Integer[] )map.toArray( new Integer[map.size()] );

І я здивований, оскільки елементи в арр в іншому порядку, ніж я розміщував у карті. Угода полягає в тому, щоб отримати такий масив:

arr[0] = 3;
arr[1] = 2;
arr[2] = 4;
arr[3] = 1;

Що я повинен зробити для цього?

Відповіді:

5 за відповідь № 1

HashSet не гарантує, що замовлення залишиться колишнім. Якщо ви хочете підтримувати порядок, тоді використовуйте ArrayList.


2 для відповіді № 2

Набори не упорядковані. Не гарантується збереження порядку елементів. Вам потрібно скористатися списком, якщо порядок, який ви додали, елементи повинен залишатися незмінним.

List<Integer> map = new ArrayList<Integer>();
map.add( new Integer( 3 ) );
map.add( new Integer( 2 ) );
map.add( new Integer( 4 ) );
map.add( new Integer( 1 ) );

2 для відповіді № 3

використовувати LinkedHashSet замість HashSet

    Set<Integer> map = new LinkedHashSet<Integer>();
map.add( new Integer( 3 ) );
map.add( new Integer( 2 ) );
map.add( new Integer( 4 ) );
map.add( new Integer( 1 ) );

Integer[] arr = ( Integer[] )map.toArray( new Integer[map.size()] );

System.out.println(Arrays.toString(arr));

0 для відповіді № 4

Ви могли б використовувати LinkedHashSet для збереження порядку введення:

Set<Integer> map = new LinkedHashSet<Integer>();