数组
介绍
数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型,也就是一组数据
案例介绍
使用方法1-动态初始化
数组的定义:
数据类型[] 数组名 = {数据1, 数据2};
数据类型 数组名[] = new 数据类型[大小];
int a[] = new int[5];
数组的引用:
数组名[下标/索引] 比如取出a数组中的第三个数 a[2]
使用方法2-动态初始化
先声明数组
语法:数据类型 数组名[]; 也可以 数据类型[] 数组名;
int a[]; 或 int[] a;
创建数组
语法:数组名 = new 数据类型[大小];
a = new int[10];
使用方法3-静态初始化
初始化数组
语法:数据类型 数组名[] = {元素1, 元素2…}
int a[] = {2, 3, 4,2, 10},如果知道数组有多少元素,具体值。
细节
数组是多个相同类型数据的组合,实现对这些数据的统一管理
数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用
数组创建后,如果没有赋值,有默认值。int 0,short 0,byte 0,long 0,float 0.0f,double 0.0,char \o0000,boolean false,String null
使用数组的步骤1.声明数组并开辟空间;2.给数组各个元素赋值;3.使用数组
数组的下标是从零开始的。
数组的下标必须在指定范围内使用,否则报:下标越界异常。
数组属于引用类型,数组型数据是对象
应用案例
创建一个char类型的26元素的数组,分别放置A-Z,使用for循环打印
数组赋值机制
基本数据类型赋值,这个值就是具体的数据,而且相互不影响
数组在默认情况下是引用传递,赋的是地址
数组拷贝
将arr1拷贝到arr2,两者相互独立
数组反转
把最后的元素放在最前
数组添加
原始数组使用静态分配
增加的元素直接放在数组最后
方法:
定义一个新数组,int[] arrNew = new int[arr.length + 1];
遍历arr数组,依次拷贝到arrNew中
将值赋给arrNew[arr.length - 1],也就是arrNew最后一个元素
让arr指向arrNew,arr = arrNew;
数组扩容十分麻烦,消耗大量的内存
练习
数组缩减,每次缩减最后一个数据,当只剩下最后一个的时候,提示不能缩减
排序
介绍
将多个数据以指定的顺序进行排列的过程
排序的分类
内部排序
指将要处理的所有数据都加载到内部存储器中进行排序。包括(交换排序、选择排序、插入排序)
外部排序
数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)
冒泡排序
通过对待排序序列从后向前,依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒
案例
冒泡排序特点
假设有五个元素,一共会进行四轮排序,可以看成是外层循环。
每一轮排序可以确定一个数的位置,比如第一轮排序确定最大数,第二轮排序确定第二大的数,以此类推。
当进行比较时,如果前面的数大于后面的数,就交换。
每轮比较次数在减少
查找
介绍
在java中,常用的查找有两种:
顺序查找
二分查找
案例演示
多维数组
介绍
从定义上看, int[][]
原来的一维数组的每个元素是一维数组,就构成二维数组
需要两次遍历才能遍历到具体数据
要访问地i+1个一维数组的第j+1个值 arr[i][j]
使用方式1-动态初始化
语法:类型[][] 数组名 = new 类型[大小][大小]
int a[][] new int[2][3]
使用方式2-动态初始化
先声明:类型 数组名[][];
再定义:数组名 = new 类型[大小][大小];
赋值
使用方式3:动态初始化-列数不确定
代码: TwoDimensionalArray02.java
示意图
使用方法4-静态初始化
定义:类型 数组名[][] = {{值1, 值2…},{值1, 值2…},{值1, 值2…}}
练习
细节
二维数组声明方式有:
int[][]或者int[] y[]或者 int y[][]
二维数组实际上是由多个一维数组组成的,它的各个一维数组长度可以相同,也可以不同
int map[][] = {{1, 2}, {3, 4, 5}}
由map[0] 是一个含有两个元素的一维数组,map[1]是一个含有三个元素的一维数组构成,我们也称之为列数不等的二维数组。
练习