Я хотів би використовувати несортовану загальну колекцію для зберігання значень.
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 за відповідь № 1HashSet
не гарантує, що замовлення залишиться колишнім. Якщо ви хочете підтримувати порядок, тоді використовуйте 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>();