我们现有的代码使用HashSet存储数据。我知道Set接口的性质是随机顺序。但是我需要相同的插入顺序。有没有办法从集合中获取插入顺序???
请指导我摆脱这个问题?
我也使用了LinkedHashSet,它还提供了其他顺序的元素,而不是我想要的插入顺序......
Set attachmentSet=new HashSet();
attachmentSet.add("dfsdfsd");
attachmentSet.add("erwerwer");
attachmentSet.add("vcvcvcv");
attachmentSet.add("ytytyt");
Iterator attachItr=attachmentSet.iterator();
while(attachItr.hasNext())
{
System.out.println("SET Item::"+attachItr.next());
}
LinkedHashSet newCopy = new LinkedHashSet();
newCopy.add("dfsdfsd");
newCopy.add("erwerwer");
newCopy.add("vcvcvcv");
newCopy.add("ytytyt");
Iterator attachItr2=copy.iterator();
while(attachItr2.hasNext())
{
System.out.println("NEW LinkedHashSet Item::"+attachItr2.next());
}
答案 0 :(得分:1)
我会说,由于哈希集的工作方式,这是不可能的:
当您将某些内容插入哈希集时,会计算其哈希值(通过某些数学获得的特殊唯一值),然后将其存储为从哈希值到其值的映射。没有'历史'插入是保持。
如果您希望实现所描述的内容,最好选择其他数据结构,例如链接列表。
按照 llogiq 和 Sasikumar Murugesan 的建议 编辑,这是一个很好的数据结构,可以满足您的需求并保留其余的软件就像使用LinkedHashSet
一样。这允许您的软件仍在其他地方使用HashSet
。
答案 1 :(得分:1)
Seelenvirtuose没错:LinkedHashSet
维护广告订单。此外,您的代码有错误,因为您迭代copy
而不是newCopy
。也许这就是你没有看到正确排序的原因?
此外,如果您想测试它不按自然顺序排序,最好添加元素,以便自然顺序与插入顺序不同。
答案 2 :(得分:1)
您必须使用LinkedHashSet来保留插入顺序,并参见下面的示例代码
LinkedHashSet lhs = new LinkedHashSet();
lhs.add("a");
lhs.add("b");
lhs.add("c");
lhs.add("d");
lhs.add("e");
Iterator iterator=lhs.iterator();
while(iterator.hasNext())
{
String value=(String)iterator.next();
System.out.println("Value :"+value);
}
输出: 一个 b C d ë