Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在集合末尾添加新行_Java_Generics_Sorting_Hashset - Fatal编程技术网

Java 在集合末尾添加新行

Java 在集合末尾添加新行,java,generics,sorting,hashset,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 ) ); 我很惊讶,因为arr中的元素的顺序与我在地图中的顺序不同。 交易是获得如下阵列: arr[0] = 3; arr[1] =

我想使用未排序的泛型集合来存储值

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 ) );
我很惊讶,因为arr中的元素的顺序与我在地图中的顺序不同。 交易是获得如下阵列:

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

我该怎么办

HashSet
不保证顺序保持不变。如果要保持顺序,请使用
ArrayList

集合无序。不能保证维持元素的顺序。如果添加元素的顺序保持不变,则需要使用列表

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 ) );
List map=new ArrayList();
map.add(新整数(3));
map.add(新整数(2));
map.add(新的整数(4));
map.add(新整数(1));
使用而不是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));
Set map=newlinkedhashset();
map.add(新整数(3));
map.add(新整数(2));
map.add(新的整数(4));
map.add(新整数(1));
整数[]arr=(整数[])map.toArray(新整数[map.size()]);
System.out.println(Arrays.toString(arr));

您可以使用
LinkedHashSet
保留输入顺序:

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

也许ArrayList会帮助您更好:它不保证集合的迭代顺序;特别是,它不能保证订单在一段时间内保持不变。此类允许空元素。改为使用
java.util.List
/
java.util.ArrayList
。根据JavaDoc
这个类实现了Set接口,由一个哈希表(实际上是一个HashMap实例)支持。它不保证集合的迭代顺序;特别是,它不能保证随着时间的推移顺序保持不变
,这就是为什么它们不符合您提出的顺序问题标题似乎与问题完全不匹配您似乎混淆了“顺序”和“排序”<如果能够精确控制每个元素在列表中的插入位置,则会对代码>集合进行排序<代码>集合s可以排序,如果您可以排序,然后使用其元素的“自然顺序”。请参阅以实现“自然排序”。或者只是实现
列表的任何类(如
ArrayList
LinkedList
,等等)。-Peter+1,如@zuxqoj在其解决方案中所述。很好地解释了为什么需要
列表
,并支持对其接口的使用。
Set<Integer> map = new LinkedHashSet<Integer>();