5

我有一个linkedhashset,我需要按照插入的顺序从中获取元素。要检索,我坚持以确切的插入顺序获取元素。

将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);

转换为列表是我的主要目标,即首先按插入顺序检索它们,因为列表不保留顺序。

你能在这里给我推荐一个替代品或我的错误吗?

4

1 回答 1

5

首先,您无需将 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迭代 以将元素添加到ArrayList. 迭代顺序取决于Collection的迭代器的实现,在 的情况下LinkedHashSet,迭代顺序是插入的顺序。因此,您List将保留插入顺序。

您可以在 Javadoc 中看到这一点:

java.util.ArrayList.ArrayList(集合 c)

按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

于 2016-04-08T14:43:24.790 回答