我这些学习笔记,记录的都是我自己认为的知识点,可能以后再看的时候还要翻书,但是可以用来定位到准确的书中示例的位置,减少翻书重找的时间,利于自身知识体系的搭建。 self-transcendence
第6章 数组
java把数组看做对象,数组中每个元素具有相同的数据类型,数组分为一维数组和二维数组
6.2 一维数组的创建和使用
一维数组是一组相同类型数据的线性集合
6.2.1 创建一维数组
一维数组的两种创建方式:
1.先声明,再用new进行内存分配
int attr[];
int[] attr;
声明数组之后给出了数组名字和元素的数据类型,接下来要为数组分配内存空间。
在为数组分配内存空间时,必须指定数组的长度。
attr[] = new int[5];
使用new为数组分配内存时,整型数组中各个元素的初始值为0
2.声明的同时为数组分配内存
int attr[] = new int[5];
6.2.2 初始化一维数组
int attr[] = new int[]{1,2,3,4,5};
6.3 二维数组的创建和使用
1.先声明,再用new进行内存分配
int attr[][];
attr = new int[2][4];//二维数组attr是由两个长度为4的一维数组构成
attr length=2 length=4
a[0] a[0][0] a[0][1] a[0][2] a[0][3]
a[1] length=4
a[1][0] a[1][1] a[1][2] a[1][3]
2.声明的同时分配内存
attr = new int[2][];
attr[0]= new int[2];
attr[1] = new int[3];
attr length=2 length=2
a[0] a[0][0] a[0][1]
a[1] length=4
a[1][0] a[1][1] a[1][2]
6.3.2 二维数组初始化
int attr[][] = {{1,2},{10,5}};
attr[1][1]的值为5
赋值方式是attr[x][y] = 20;例如attr[1][1] = 20;
6.4 数组的基本操作
java.util包的Arrays包含了操作数组的各种方法。
遍历二维数组用双层for嵌套,通过length属性获得数组的长度。
数组中的元素可以用Arrays类的fill()来替换:
.fill ( int[] a,int value);//把数组中所有元素的值改为value
.fill ( int[] a,int index, int last, int value);//把数组中index下标到last-1下标的值改为value
数组升序排序可以用Arrays类的sort ( )方法实现。
.sort ( attr);//attr数组名。java中String类型数组的排序算法是根据字典编排顺序排序,数字排在字母前,大写字母排在小写字母前。
.copyOf ( attr,int length);//attr原数组,length新数组长度,新的长度大于旧的,则用0填充,新的长度小于旧的,则从旧的第一个开始截取新的长度。
.copyOfRange ( attr, int index , int last);//从旧数组的index下标(包括)开始复制到last的下标位置(不包括)。last可大于旧的长度,index必须在旧数组的长度范围内。
.binarySearch ( Object[] a, Object key);//在数组a中搜索key,如果key存在,则返回下标,否则返回-1或者“-”(插入点),插入点是搜索键将要插入数组的哪一点,即第一个大于此键的元素下标。
.binarySearch ( Object[] a, int index, int last, Object key);//用查询方法必要先排序,来获得准确的索引值,如果key存在,返回索引,否则返回-1或者“-”(插入点)。如果范围中所有元素都小于指定的键,则为last(注意,这保证了当且仅当此键被找到时,返回的值将大于等于0)
int attr[] = new int[]{4, 25, 10};
Arrays.sort(attr);
int index = Array.binarySearch(attr, 0 ,1 ,8);
上面代码中变量index的值是元素“8”在数组中索引在0~1内的索引位置。由于在指定的范围内并不存在元素“8”,index的知识“-”(插入点)。如果对数组进行排序,元素“8”应该在“25”的面前,因此插入点应是元素“25”的索引值2,所以index的值是-2。如果数组中的所有元素都小于指定的键,则为attr.length(注意,这保证了当且仅当此键被找到时,返回的值将大于等于0)
6.5 数组排序算法
6.5.1 冒泡排序
1.基本思想
2.算法示例
3.算法实现
6.5.2 直接选择排序
1.基本思想
2.算法示例
3.算法实现
6.5.3 反转排序
1.基本思想
2.算法示例
3.算法实现