我需要维护一组中最近插入的订单。
Set<Intger> s = new HashSet<>();
s.add(1);
s.add(2);
s.add(3);
s.add(1);
print(s);
使用LinkedHashSet()时,顺序为(1,2,3)。 我要的顺序是(2,3,1)。我想要一种将集合的属性与堆栈的属性组合在一起的有效方法。
答案 0 :(得分:0)
非常简单,只需制定一种方法来判断该集合是否具有需要添加的值,如果是 删除它,然后添加它,如果不只是添加它。
package exercise.setInsertionOrder;
import java.util.LinkedHashSet;
import java.util.Set;
public class SetInsertionOrder {
public static void main(String[] args) {
Set<Integer> s = new LinkedHashSet<>();
/*s.add(1);
s.add(2);
s.add(3);
s.add(1);*/
addByJudgeValueIsAdded(s, 1);
addByJudgeValueIsAdded(s, 2);
addByJudgeValueIsAdded(s, 3);
addByJudgeValueIsAdded(s, 1);
System.out.println(s);
}
public static <T> void addByJudgeValueIsAdded(Set<T> set,T t){
if(set.contains(t)){
set.remove(t);
set.add(t);
}else{
set.add(t);
}
}
}
这是结果。
[2,3,1]
答案 1 :(得分:0)
如何?
Set<Integer> s = new LinkedHashSet<>();
addToSet(1, s);
addToSet(2, s);
addToSet(3, s);
addToSet(1, s);
print(s);
void addToSet(Integer v, Set<Integer> s) {
s.remove(v);
s.add(v);
}
答案 2 :(得分:0)
使用LinkedHashSet
代替Hashset
来保持插入顺序。
Set<Integer> s = new LinkedHashSet<Integer>();
答案 3 :(得分:-1)
祝你好运。