迭代器从第一个元素开始

时间:2014-04-17 11:57:14

标签: java loops iterator hashset

我想调用我的Set'set'的第一个元素。此时内容设置= [“1”,“2”] ...当我运行以下代码时,它在iter.next()中返回“2”,是否有可能他首先返回“1” “并在下一个循环中”2“?

//Remove duplicates from array
Set set= new HashSet(Arrays.asList(leveranciers));

Iterator iter = set.iterator();

while (iter.hasNext()) {

    //for (Iterator it = set.iterator();it.hasNext();){
    PdfPTable table = GetTable(""+ iter.next());
    byte[] pdf = wdThis.wdGetAchatsIndirectController().GetPDFFromFolder("/intranetdocuments/docs/AchatsIndirect", table);
    wdThis.wdGetAchatsIndirectController().PrintPDF(pdf);
}

2 个答案:

答案 0 :(得分:3)

好吧,HashSet不会保留广告订单。如果您需要,请使用LinkedHashSet。请使用参数化版本。

答案 1 :(得分:0)

一般来说,Set中没有“第一个元素”。 set.iterator().next()将为您提供一个任意元素(如果该集为空,则为null)。但是,LinkedHashSet将允许您按照添加到集合中的顺序迭代元素。 TreeSet将允许您按自然顺序迭代元素(如果它们是Comparable)。或许你真的想要一个List

然而,这不是你想做的吗?

// Assuming it is strings in 'leveranciers' (as implied by set=["1", "2"])
for(String s : Arrays.asList(leveranciers)) {
    PdfPTable table = GetTable("" + s);
    byte[] pdf = wdThis.wdGetAchatsIndirectController().GetPDFFromFolder("/intranetdocuments/docs/AchatsIndirect", table);
    wdThis.wdGetAchatsIndirectController().PrintPDF(pdf);
}

此外,正如Joffrey所述,请添加您的收藏品的通用类型,例如FooBar(无论它们可能是什么):

Set<Foo> set = ...
Iterator<Bar> iter = ...