Java 如何在迭代时向集合中添加整数?
我有一组整数:Java 如何在迭代时向集合中添加整数?,java,iterator,set,Java,Iterator,Set,我有一组整数:set。 我需要将整数添加到集合集中,就像它是一个双数组一样。所以add(2,3)必须将整数3添加到第二个集合中。 我知道一套不太适合这个手术,但这不是我的要求。 下面的注释行显然不起作用,但它表明了意图 我的问题是如何在迭代时向集合中添加整数? 如果有必要确定每一组,人们将如何做到这一点 @Override public void add(int a, int b) { if (!isValidPair(a, b)) { throw new Illegal
set
。
我需要将整数添加到集合集中,就像它是一个双数组一样。所以add(2,3)必须将整数3添加到第二个集合中。
我知道一套不太适合这个手术,但这不是我的要求。
下面的注释行显然不起作用,但它表明了意图 我的问题是如何在迭代时向集合中添加整数? 如果有必要确定每一组,人们将如何做到这一点
@Override
public void add(int a, int b) {
if (!isValidPair(a, b)) {
throw new IllegalStateException("!isValidPair does not hold for (a,b)");
}
Iterator<Set<Integer>> it = relation.iterator();
int i = 0;
while (it.hasNext() && i <= a) {
//it.next().add(b);
i++;
}
}
@覆盖
公共无效添加(内部a、内部b){
如果(!isValidPair(a,b)){
抛出新的IllegalStateException(“!isValidPair不适用于(a,b)”);
}
迭代器it=关系。迭代器();
int i=0;
而(it.hasNext()&&iUse可以像这样使用库的迭代器
:
@Override
public void add(int a, int b) {
if (!isValidPair(a, b)) {
throw new IllegalStateException("!isValidPair does not hold for (a,b)");
}
Iterators.get(relation.iterator(), a).add(b);
}
编辑:不含番石榴:
Iterator<Set<Integer>> iterator = relation.iterator();
for(int i = 0; i < a && iterator.hasNext(); ++i) {
iterator.next();
}
if(iterator.hasNext()) {
iterator.next().add(b);
}
Iterator Iterator=relation.Iterator();
for(int i=0;i
为每个循环使用一个循环,让您的生活更轻松
public boolean add(int index, int value) {
// because a and b suck as variable names
if (index < 0 || index >= values.size()) {
return false;
}
int iter = 0;
for (Set<Integer> values : relation) {
if (iter++ == index) {
return values.add(value):
}
}
return false;
}
public boolean add(int索引,int值){
//因为a和b都是变量名
如果(索引<0 | |索引>=values.size()){
返回false;
}
int-iter=0;
for(设置值:关系){
if(iter++==索引){
返回值。添加(值):
}
}
返回false;
}
现在你所要做的就是,如果关系是无序的,就像集合或一个关系是无序的,因为在这种情况下,不同的集合可以在每次循环执行时匹配相同的索引离子不工作:
一旦将对象添加到集合
(类似地,作为映射
)中的键,它就不应该更改(至少在将更改其equals()
和hashCode()
的方面不应该更改)。只有在将对象添加到集合
中时,才会执行“唯一性”检查
比如说
Set<Set<Integer>> bigSet = new HashSet<>();
Set<Integer> v1 = new HashSet<>(Arrays.asList(1,2));
bigSet.add(v1);
System.out.println("contains " + bigSet.contains(new HashSet<>(Arrays.asList(1,2)))); // True
v1.add(3);
System.out.println("contains " + bigSet.contains(new HashSet<>(Arrays.asList(1,2)))); // False!!
System.out.println("contains " + bigSet.contains(new HashSet<>(Arrays.asList(1,2,3)))); // False!!
“下面的注释行显然不起作用”-请详细说明。我同意:当谈论条目的“顺序”时,集合不是合适的数据结构。“不起作用”并不是对寻求帮助时会起作用的问题的描述。同理,注释行给出了java.util.NoSuchElementException(但编译).Attenting。但是我认为我不允许使用下载的库。谢谢你的建议。如果循环条件iterator.hasNext()
在整数比较之前失败。我意识到我们应该假设黑盒isValidPair
方法解决了这一问题,但我们在这里没有看到证据。在这种情况下,使用单独的边界检查方法有点过度工程化。对设置中的值进行变异会导致贪污Set@Adrian你确定这一点吗?它将如何损坏集合?@Lew添加另一个if(iterator.hasNext())
应该能正确解决这个问题吗?改变你在集合中输入的值将损坏集合。
int i = 0;
Set<Integer> setToAdd = null;
for (Iterator itr = bigSet.iterator; itr.hasNext(); ++i) {
Set<Integer> s = itr.next();
if (i == inputIndex) {
// remove the set first
itr.remove();
setToAdd = s;
break;
}
}
// update the set and re-add it back
if (setToAdd != null) {
setToAdd.add(inputNumber);
bigSet.add(setToAdd);
}