排序List时的ArrayIndexOutOfBoundsException

Moh*_*ran -2 java

我在排序中面临ArrayIndexOutOfBoundsException.我的代码在这里:

Collections.sort(mutualFriends, new Comparator<FriendInfo>() {
   public int compare(FriendInfo s1, FriendInfo s2) {
       return s1.name.compareToIgnoreCase(s2.name);
   }
});
Run Code Online (Sandbox Code Playgroud)

日志在这里:

    STACK_TRACE=java.lang.ArrayIndexOutOfBoundsException
    at java.util.Collections.sort(Collections.java:1970)
    at com.platinumapps.fragments.Mutual_Friends_Fragment$1.onComplete(Mutual_Friends_Fragment.java:138) 
    at com.platinumapps.facedroid.AsyncRequestListener.onComplete(AsyncRequestListener.java:59) 
    at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:328)
Run Code Online (Sandbox Code Playgroud)

我的共同朋友名单如下:

private List<FriendInfo> mutualFriends = new ArrayList<FriendInfo>();
Run Code Online (Sandbox Code Playgroud)

有任何想法来解决这个问题.提前致谢.

ami*_*mit 5

您很可能在这里进行数据竞争.

一些其他线程尝试在排序(或访问)时修改列表 - 并且你得到一个竞争条件,这会导致你的情况IndexOutOfBoundsException.

很难知道问题的确切位置,但解决问题的一些通用方法是:

  1. 确保您的代码是线程安全的.它可以synchronized通过ArrayList任何地方使用的对象轻松完成 -
  2. 使用专为线程安全而设计的类.

在您的情况下可能出现问题的常见错误是产生线程,而不是在排序之前等待它们完成工作.这可以通过join()在假设它们完成之前简单地调用所有线程来解决- 这可以确保在所有线程完成之前不会继续.