关于数组和集合的冒泡排序中容易出现的IndexOutOfBoundsException

数组只能存错一种相同的数据类型,集合只能存储引用数据类型(用泛型),集合的底层就是一个可变的数组。

数组的冒泡排序:

public static void arrayMaxPaiXu(int[] arr) {
  int temp;                       //定义的元素调换时的中间变量
  int x = arr.length - 1;     //定义的用来控制内层循环次数的变量,可以不定义,但是可以提高效率
  for (int j = 0; j < arr.length - 1; j++) {                       //外层循环,控制循环次数,可以减一,可以不减
    for (int i = 0; i < x; i++) {              //内层循环,一定要数组的元素个数减一,因为比较到最后一个元素的时候,加一就会数组越界  
      if (arr[i] < arr[i + 1]) {
        temp = arr[i];
        arr[i] = arr[i + 1];             //元素调换位置
        arr[i + 1] = temp;
      }
    }
    x--;                         //控制内层次数,使外层循环每循环一次,内层循环就可减少最后一次比较,因为最后的元素已经固定
  }
  systemOut(arr);
}

//冒泡排序在数组中只有一两个元素是乱序的时候是效率最高的方法,但再元素全是随机的情况下就是最慢的排序方法了

集合的冒泡排序:

char temp;      //换位置都需要定义中间变量,最好定义在循环之前,不用每循环一次就为其分配一次内存
for (int i = 0; i < list.size(); i++) {
  for (int j = 0; j < list.size(); j++) {
    if(j != list.size() - 1 && list.get(j) > list.get(j + 1)){           //如果循环条件没有减一,就在判断条件中判断元素是否为最后一个
      temp = list.get(j);
      list.set(j, list.get(j + 1));       //因为集合的长度是改变的,所以调用集合中的set(index, E e)为其赋值
      list.set(j + 1, temp);
    }
  }
}

上一篇:sharepoint Linq方式的增,删,查,改


下一篇:thymeleaf模板引擎调用java类中的方法(附源码)