【问题标题】:Iterating through an arraylist of sets遍历集合的arraylist
【发布时间】:2020-06-23 03:43:03
【问题描述】:

我目前正在尝试遍历包含字符串的集合数组列表。它看起来像这样:

ArrayList<Set<String>> e = new ArrayList<Set<String>>(Size);

    for(int i = 0; i < e.size(); i++) {
        for(Object obj: e) {
            System.out.println(e);
        }
    }

我正在尝试访问和修改集合内的字符串(事先打印以查看它是否有效),但我找不到找到它们的方法。有什么想法吗?

【问题讨论】:

  • 改变集合内容的唯一方法是删除或添加元素。您不能更改 Set 的现有元素。
  • 你到底想做什么,你能展示一个输入输出的例子吗?
  • @YCF_L 说出了我的想法。
  • @Eran:当然您可以更改Set 中的元素!但是这个元素不能是不可变的(字符串是不可变的……),当更改会对equals()hashCode() 和/或最终比较器的比较方法产生影响时,它可能会杀死你的集合结构体。因此,就地修改集合的元素通常被认为是一个坏主意——但有可能……
  • @tquadrat 我的意思是你不能替换 Set 中的元素(不像 List 中你有一个 E set(int index, E element) 方法来替换给定位置的元素)。

标签: java loops iterator iteration


【解决方案1】:

您不能修改字符串;如果您想更改Sets 中的字符串之一,您必须将其删除并添加新的。

关于(简单)迭代:

for( var set : e )
{
  for( var string : set )
  {
     out.println( string );
  }
}

如果你想改变你的数据结构的内容:

for( var set : e )
{
  Set<String> newStrings = new HashSet<>();
  for( var i = set.iterator(); i.hasNext(); )
  {
    var string = i.next();
    if( isInvalid( string ) )
    { 
      i.remove();
      newStrings.add( calculateNewString( string ) );
    } 
  }
  set.addAll( newStrings );
}

【讨论】:

    【解决方案2】:
    ArrayList<Set<String>> e = new ArrayList(size);
    //Fill your sets with data here
    
    for(Set<String> set : e) { //Iterate through the Arraylist getting every set
        for(String element : set) { //Iteretae through the current Set getting every String
            System.out.println(element);
        }
    }
    

    【讨论】:

      【解决方案3】:

      嘿,我可以帮助你处理访问部分,因此你应该使用这样的 foreach 循环

      ArrayList<Set<String>> e = new ArrayList<Set<String>>();
      
          for (Set<String> oneSet : e) {
      
              for (String oneString : oneSet) {
      
                  oneString
                  //do something...
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2014-04-11
        • 2011-07-10
        • 1970-01-01
        • 2015-11-28
        • 2011-01-30
        • 2018-02-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多