我有一个linkhashset,我需要按照插入的顺序获取元素。 要检索,我很难按正确的插入顺序获取元素。
将linkedHashset转换为List以按索引获取,但恐怕转换为list会改变我的元素更改顺序
LinkedHashSet<String> personDetails = new LinkedHashSet<String>();
//persondetails => John, kennedy, Female
List<String> details = new ArrayList<>(personDetails);
String firstName = details.get(0);
String lastName = details.get(1);
String gender = details.get(2);
转换为列表正在抛弃我的主要目标,即首先按插入顺序检索它们,因为列表不保留订单。
你可以在这里建议我一个替代或我的错误吗?
答案 0 :(得分:3)
首先,您不需要将LinkedHashSet转换为List,以便根据插入顺序检索它们。您可以使用迭代器迭代Set。
例如:
Iterator<String> iter = personDetails.iterator();
String firstName = null;
if (iter.hasNext())
firstName = iter.next();
String lastName = null;
if (iter.hasNext())
lastName = iter.next();
String gender = null;
if (iter.hasNext())
gender = iter.next();
其次,当您使用接受源ArrayList
作为输入的构造函数创建Collcetion
时,会迭代Collection
以向{{1}添加元素}。迭代顺序取决于ArrayList
迭代器的实现,而在Collection
的情况下,迭代顺序是插入顺序。因此,LinkedHashSet
会保留广告订单。
你可以在Javadoc中看到这个:
java.util.ArrayList.ArrayList(Collection c)
构造一个列表,其中包含指定集合的元素,按集合的迭代器返回的顺序。