相关疑难解决方法(0)

ViewPager作为循环队列/包装

我使用的是ViewPagerFragmentStatePagerAdapter让一些片段之间的导航.

比方说,我有三个片段:A,BC.ViewPager最初显示片段A,并允许您通过从右向左滑动,然后再次滑动到片段C来导航到片段B. 这允许以下导航路径:A <--> B <--> C.

我想要的是能够在片段A上从左向右滑动并让ViewPager显示片段C,即它表现为循环队列并允许 ... --> C <--> A <--> B <--> C <--> A <-- ...

我不希望片段在其他位置重复(即最终有三个以上的实例).

使用ViewPager可以实现这种包装功能吗?

android android-fragments android-viewpager

64
推荐指数
6
解决办法
5万
查看次数

在列表迭代期间从java.util.List中删除元素时抛出ConcurrentModificationException?

@Test
public void testListCur(){
    List<String> li=new ArrayList<String>();
    for(int i=0;i<10;i++){
        li.add("str"+i);
    }

    for(String st:li){
        if(st.equalsIgnoreCase("str3"))
            li.remove("str3");
    }
    System.out.println(li);
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我将抛出一个ConcurrentModificationException.

看起来当我从列表中删除指定的元素时,列表不知道它的大小是否已被更改.

我想知道这是集合和删除元素的常见问题吗?

java list concurrentmodification

60
推荐指数
5
解决办法
5万
查看次数

循环列表中删除

    for (String fruit : list)
    {
        if("banane".equals(fruit))
            list.remove(fruit);
        System.out.println(fruit);
    }
Run Code Online (Sandbox Code Playgroud)

这里有一个带删除指令的循环.在执行时,我在控制台输出下面得到一些ConcurrentModificationException:

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
at java.util.AbstractList$Itr.next(AbstractList.java:420)
at Boucle.main(Boucle.java:14)
abricot
banane
Run Code Online (Sandbox Code Playgroud)

问题:如何用循环删除一些元素?

java collections

40
推荐指数
4
解决办法
4万
查看次数

为什么这段代码不会抛出ConcurrentModificationException?

为什么这段代码没有抛出ConcurrentModificationException?它修改了一段Collection时间迭代它,而不使用Iterator.remove()方法,这是唯一安全的删除方法.

List<String> strings = new ArrayList<>(Arrays.asList("A", "B", "C"));
for (String string : strings)
    if ("B".equals(string))
        strings.remove("B");
System.out.println(strings);
Run Code Online (Sandbox Code Playgroud)

如果我ArrayList用a 替换,我会得到相同的结果LinkedList.但是,如果我将列表更改为("A", "B", "C", "D)或只是("A", "B")按预期获得异常.到底是怎么回事?我正在使用,jdk1.8.0_25如果这是相关的.

编辑

我找到了以下链接

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4902078

相关部分是

天真的解决方案是在AbstractList中为hasNext添加编码检查,但这会使编纂检查的成本增加一倍.事实证明,仅在最后一次迭代时进行测试就足够了,这几乎不会增加成本.换句话说,hasNext的当前实现:

    public boolean hasNext() {
        return nextIndex() < size;
    }
Run Code Online (Sandbox Code Playgroud)

被此实现取代:

    public boolean hasNext() {
        if (cursor != size())
            return true;
        checkForComodification();
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

由于Sun内部监管机构拒绝了此项更改,因此不会进行此更改.正式裁决表明,这一变化"已证明可能对现有代码产生重大的兼容性影响." ("兼容性影响"是修复程序有可能用ConcurrentModificationException替换静默不当行为.)

java

25
推荐指数
2
解决办法
1496
查看次数

如何在没有ConcurrentModificationException的情况下使用for-each循环迭代时修改Collection?

如果我在使用for-each循环迭代它时修改Collection,它会给出ConcurrentModificationException.有没有解决方法?

java collections concurrentmodification

22
推荐指数
2
解决办法
5万
查看次数

如何从Java中的ArrayList中删除特定对象?

如何从ArrayList中删除特定对象?假设我有一个如下课程:

import java.util.ArrayList;    
public class ArrayTest {
    int i;

    public static void main(String args[]){
        ArrayList<ArrayTest> test=new ArrayList<ArrayTest>();
        ArrayTest obj;
        obj=new ArrayTest(1);
        test.add(obj);
        obj=new ArrayTest(2);
        test.add(obj);
        obj=new ArrayTest(3);
        test.add(obj);
    }
    public ArrayTest(int i){
        this.i=i;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何new ArrayTest(1)从我的删除对象ArrayList<ArrayList>

java arraylist

22
推荐指数
5
解决办法
15万
查看次数

从每个循环中的ArrayList中删除对象

我想从一个ArrayList完成它的时候删除一个对象,但我找不到办法去做.试着像下面的示例代码中删除它不想工作.我怎么能px在这个循环中找到当前对象的迭代器来删除它?

for( Pixel px : pixel){ 
[...]
  if(px.y > gHeigh){
     pixel.remove(pixel.indexOf(px)); // here is the thing
     pixel.remove(px); //doesn't work either
  }
}
Run Code Online (Sandbox Code Playgroud)

java arraylist

21
推荐指数
2
解决办法
4万
查看次数

哪些Java集合是同步的(线程安全),哪些不是?

哪些Java集合是同步的,哪些不是?

示例:HashSet未同步

java collections

18
推荐指数
5
解决办法
6万
查看次数

听众应该能够删除听众吗?

许多类使用类似于以下的代码来激活侦听器.

private List<Listener> listeners = new ArrayList<Listener>();

public void fireListener() {
  for(Listener l : listeners) l.someMethod();
}
Run Code Online (Sandbox Code Playgroud)

这一点很好,直到侦听器尝试添加/删除侦听器.从列表内部进行的这种修改会导致a ConcurrentModificationException.我们应该处理这种情况还是应该修改听众无效?处理添加/删除侦听器的最佳方法是什么?

更新:
这是一个可能的解决方案.

public void fireListener() {
  for(Listener l : listeners.toArray(new Listener[listeners.size()])) {
    if(!listeners.contains(l)) continue;
    l.someMethod();
  }
}
Run Code Online (Sandbox Code Playgroud)

java

16
推荐指数
3
解决办法
2033
查看次数

尽管使用synchronized,ConcurrentModificationException

 public synchronized X getAnotherX(){ 
  if(iterator.hasNext()){
   X b = iterator.next();
   String name = b.getInputFileName();
  ...
   return b;
  }
  else{return null;}
 }
Run Code Online (Sandbox Code Playgroud)

尽管声明头中的synchronized语句,我仍然在我使用iterator.next()的行中得到一个ConcurrentModificationException异常; 什么错了?

java concurrency iterator

15
推荐指数
2
解决办法
2万
查看次数