Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在迭代时向集合中添加整数?_Java_Iterator_Set - Fatal编程技术网

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);
}