编辑:这实际上是针对Android应用程序的,这意味着(据我所知),我只能使用HashSet。
Set<String> set = new HashSet<String>();
set.add("1");
set.add("2");
set.add("3");
set.add("4");
set.add("5");
set.add("6");
set.add("7");
set.add("8");
String[] array = set.toArray(new String[0]); // convert the set to an array
System.out.println(Arrays.toString(array)); // test what the set looks like
输出为[3, 2, 1, 7, 6, 5, 4, 8]
我期待[1, 2, 3, 4, 5, 6, 7, 8]
,因为我认为它会按照添加时的顺序将字符串添加到集合中。
在我的应用程序中,Set的顺序必须按照元素添加到Set的顺序。
这套装是否有故障?或者有没有办法将其重新添加到添加元素的顺序中?
答案 0 :(得分:5)
如果要订购集合的元素,请使用LinkedHashSet
。有关详细信息,请参阅this链接。
答案 1 :(得分:3)
HLO。
你可以选择第二种选择。
Set<String> set = new LinkedHashSet<String>();
答案 2 :(得分:2)
数据结构HashSet
是无序和未排序的集合。
如果您希望使用自然顺序对元素进行排序,可以使用TreeSet
如果您想使用广告订单维护,请使用LinkedHashSet
答案 3 :(得分:2)
不,这是设计上的。 HashSet
会将您的字符串插入适合您数据的存储区中,从而最大限度地降低检索速度。
如果您想保留词法顺序,请使用TreeSet
。 (使用示例,您可以 工作,但仅因为您的输入数据已排序)。
如果您想保留广告订单,请使用LinkedHashSet
。
答案 4 :(得分:1)
是的,有一个原因,你会知道你是否读过它的第一行是javadoc:
此类实现Set接口,由哈希表(实际上是HashMap实例)支持。它不能保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。
答案 5 :(得分:1)
HashSet
不保持可预测的顺序,它将取决于对象引用的hashCode
。如果要保持插入元素的顺序,请使用LinkedHashSet
。如果要保持元素始终排序,请使用TreeSet
。