作者:easonash_949 | 来源:互联网 | 2023-02-01 08:15
如果我从同一组创建2个列表,我可以确定在两个列表中都获得相同的排序吗?(只要两个列表具有相同的顺序,并且我在创建两个列表之间没有对集合执行任何操作,我不关心排序.)
List l = new ArrayList(set);
List l1 = new ArrayList(set);
我知道有保证创建这些列表并获得相同顺序的方法,并且我没有充分的理由以这种方式创建两个列表,但我想知道为什么集合中元素的排序会发生变化如果没有对它执行修改操作.
编辑:该集是一个无序的HashSet
1> SilverNak..:
你会propably获得单上相同的排序l
和l1
.但由于大多数套件都是无序的,因此您无法保证订单会相同.
从技术上讲,您可以编写Set
接口的实现,每次调用任何方法时都会更改其顺序.这仍然可以实现界面.
因为在构造函数new ArrayList(Collection)
的toArray
集合的方法被调用,我们可以有一个看的Javadoc的Set#toArray()
:
返回包含此set中所有元素的数组.如果此set对其迭代器返回的元素的顺序做出任何保证,则此方法必须以相同的顺序返回元素.
虽然Javadoc Set#iterator()
说没有一般保证:
返回此set中元素的迭代器.元素以无特定顺序返回(除非此集合是某个提供保证的类的实例).
鉴于此,我强烈建议您不要依赖列表的排序.