关于数组和集合的冒泡排序中容易出现的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);
}
}
}
关于数组和集合的冒泡排序中容易出现的IndexOutOfBoundsException的更多相关文章
- Java中数组与集合的相互转换
数组与List的相互转换 List转数组:采用集合的toArray()方法 数组转List:采用Arrays的asList()方法 数组转换为集合 注意:在数组转集合的过程中,要注意是否使用了视图的方 ...
- Java集合与泛型中的几个陷阱,你掉进了几个?
下面我总结了集合.泛型.数组转集合等一些常见的陷进,认真看完,相信你绝对有所收获. 1.List ,List<?> 与 List<Object> 有区别吗? 说实话,我敢保证很 ...
- Java的数组,集合,数据结构,算法(一)
本人的愚见,博客是自己积累对外的输出,在学习初期或自己没有多少底料的情况下,与其总结写博客不如默默去搞自己的代码,但是学到集合这一块时,数组,集合,数据结构,算法这个概念搞的我比较混淆,所以不得已写这 ...
- java数组、泛型、集合在多态中的使用及对比
我们在使用数组,泛型集合的过程中不可避免的会碰到多态,或者说什么情况下能如何使用父数组引用子数组(集合.泛型)呢? 数组在多态中的使用 元素为父类型的数组引用可指向元素为子类型的数组对象 当数组被调用 ...
- java中数组、集合、字符串之间的转换,以及用加强for循环遍历
java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...
- Java中的数组与集合
此文转载自:http://student-lp.iteye.com/blog/2082362 在java编程的过程中,我们不能确定某一类型的对象到底会需要多少,为了解决这个问题,java提供了容纳对象 ...
- java中数组以及集合
java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象.但实际数组也是一种对象类型,int[]a = new int[5] a是在java栈中分配的引用变量,类型是int[ ...
- java中的数组与集合相互转换
1.数组转换成集合 数组转换为集合,用Arrays.asList方法. public static void main(String[] args) { String[] arr = {"a ...
- C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响)
C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响),如以下代码将无法通过编译. foreach (int x in myArray) { x++; //错误代码,因为改变 ...
随机推荐
- 使用Navicat Premium 链接本地数据库的方法
在工作中,为了更方便的使用数据库,不免会用到Navicat Premium: 于是在重新安装电脑系统之后,原本想在其中链接一下本地数据库, 只是在链接途中要写的密码一项却不晓得应该写什么,想了很久密码 ...
- ADO.NET 数据库操作类
操作数据类 避免代码重用.造对象太多.不能分工开发 利用面向对象的方法,把数据访问的方式优化一下,利用封装类 一般封装成三个类: 1.数据连接类 提供数据连接对象 需要引用命名空间: using ...
- Linux驱动技术(五) _设备阻塞/非阻塞读写
等待队列是内核中实现进程调度的一个十分重要的数据结构,其任务是维护一个链表,链表中每一个节点都是一个PCB(进程控制块),内核会将PCB挂在等待队列中的所有进程都调度为睡眠状态,直到某个唤醒的条件发生 ...
- PHP面向对象编程简单实例
<?php date_default_timezone_set("PRC"); /** 1.静态属性用于保存类的公有数据* 2.静态方法里面只能访问静态属性* 3.静态成员 ...
- 使用SBT编译Spark子项目
前言 最近为了解决Spark2.1的Bug,对Spark的源码做了不少修改,需要对修改的代码做编译测试,如果编译整个Spark项目快的话,也得半小时左右,所以基本上是改了哪个子项目就单独对那个项目编译 ...
- MySQL索引创建、删除、查看
主键索引 PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引.这表示一个表只能包含一个PRIMARY KEY,因为一个表中不可能具有两个同名的索引. ALTER TABLE ...
- Linux实战教学笔记14:用户管理初级(下)
第十四节 用户管理初级(下) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,用户查询相关命令id,finger,users,w,who,last,lastlog,gr ...
- 我的JS 中级学习篇
在codefordream上进入中级学习后,感觉立马从js的基础学习往前跳了好远,上面的东西好像都是第一次看到一样.这时候才发现,说来也曾接触过js,但是这时候才发现对js的认识就停在知道两点:js中 ...
- C语言中的函数、数组与指针
1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念: 函 ...
- Form表单中method="post/get'的区别
Form提供了两种数据传输的方式--get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响.虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一 ...