以插入顺序检索LinkedHashSet元素并将其保存到局部变量

时间:2016-04-08 14:39:35

标签: java arraylist collections set linkedhashset

我有一个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);

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

你可以在这里建议我一个替代或我的错误吗?

1 个答案:

答案 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)

     

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