• 关于数组和集合的冒泡排序中容易出现的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);
        }
      }
    }

  • 相关阅读:
    storm源代码分析---Transactional spouts
    SQLServer 中存储过程
    实体添加映射
    SELECT INTO 和 INSERT INTO SELECT
    .NET System.Timers.Timer的原理和使用(开发定时执行程序)
    .net Framework 中的四种计时器
    AutoMapper 在你的项目里飞一会儿
    C#字符串、字节数组和内存流间的相互转换
    Entity Framework Code First使用者的福音 --- EF Power Tool使用记之二(问题探究)
    Entity Framework Code First使用者的福音 --- EF Power Tool使用记之一
  • 原文地址:https://www.cnblogs.com/chonglchong/p/6547456.html
Copyright © 2020-2023  润新知