2014-11-06 44 views
0

我想移除HashSet的第一个元素并将此移除的元素指定给另一个变量。由于它的remove函数返回布尔值,所以我不能这样做。我怎样才能获得它的删除值?谢谢。 我的代码是将从HashSet中移除的元素指定给变量

HashSet<Node> List = new HashSet<Node>(); 
    expandList.add(s); 
    while(expandList.size() > 0) 
    { 
    Node toAssigned = List.remove(s); 
    // other works related with toAssigned are here 

    } 

回答

0

Vladimir Ivanovwords

可以延长LinkedHash添加所需getIndex()方法。

只需通过使用迭代器和计数器的集合,检查对象是否相等。如果找到了,请返回柜台。

,或者你可以尝试Kiryl Ivanousolution

创建集只是将其转换为列表,并列出了指数得到后:

Set<String> stringsSet = new HashSet<>(); 
stringsSet.add("string1"); 
stringsSet.add("string2"); 

List<String> stringsList = new ArrayList<>(stringsSet); 
stringsList.get(0); // "string1"; 
stringsList.get(1); // "string2"; 
+0

但是是不是efcect的性能吗?此代码是8益智游戏的BFS算法的一部分。我必须使用HashSet,因为我的顾问,因为他说arrayList太慢@mahdad – user3864949 2014-11-06 22:26:38

+0

@ user3864949: HashSet确保没有重复项,给你一个O(1)contains()方法,但不保留顺序。 ArrayList不确保没有重复项,contains()是O(n)但您可以控制条目的顺序。 – aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 2014-11-06 22:29:46

+0

@ user3864949我相信使用哈希集具有比数组列表更好的性能。但你需要为你的问题做 – aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 2014-11-06 22:30:44

0

没有的概念作为序列顺序的HashSet中的第一个元素未指定。也许,队列数据结构可能更适合您的需要。

http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html

如果您需要删除从集合的元素而无需担心,你删除哪个元素,你可以使用以下命令:

set.iterator().next()