JAVA数组(Array)(更新中。。。)
数组的概述
是多个相同数据类型,按一定顺序排列的集合,并使用一个名字命名,通过编号的方式进行统一管理。
数组的常见概念
- 数组名
- 元素
- 下标(索引)
- 数组长度
数组的特点
- 数组是有序排列的
- 数组是引用数据类型的变量,数组元素可以是基本数据类型,也可以是引用数据类型
- 创建数组会在内存中开辟一整块连续的内存空间
- 数组的长度一旦确定,就不能修改
数组的分类
- 按维数分类:一维数组、二维数组
- 按元素的类型:基本数据类型、引用数据类型
一维数组的使用
- 声明和初始化
- 调用数组指定的元素
- 获取数组的长度
- 遍历数组
- 数组元素的默认初始化
- 数组的内存解析
public class ArrayTest{
//静态初始化
int[] ids;//声明
ids = new int[]{1,2,3,4,5}//初始化
//动态初始化
String[] names = new String[5];
//数组索引
names[0] = "jinwennan";
names[1] = "xuxinyao";
names[2] = "songqigang";
//获取数组长度
System.out.pringln(names.length);
//遍历数组
for(int i = 0;i < names.length;i++){
System.out.println(names[i]);
}
//数组元素默认初始化值
int[] arr = new int[5]
for(i = 0;i < arr.length;i++){
System.out.println(arr[i]);//输出结果0 0 0 0;
}
//整数型默认;0
//浮点数默认值:0.0
//布尔型默认值:false
//char型默认值:0 ,而非'0';
//引用数据类型:null;
}
数组内存解析流程图
二维数组内存解析
数组排序和算法
杨辉三角
//杨辉三角
@Test
public void test02() {
//声明二维数组
int[][] yangHui = new int[10][];
for (int i = 0; i < yangHui.length; i++) {
yangHui[i] = new int[i + 1];
}
//赋值
for (int i = 0; i < yangHui.length; i++) {
yangHui[i][0] = 1;
yangHui[i][i] = 1;
}
for (int i = 2; i < yangHui.length; i++) {
for (int j = 1; j < yangHui[i].length - 1; j++) {
yangHui[i][j] = yangHui[i - 1][j - 1] + yangHui[i - 1][j];
}
}
//遍历输出
for (int i = 0; i < yangHui.length; i++) {
for (int j = 0; j < yangHui[i].length; j++) {
System.out.print(yangHui[i][j] + "\t");
}
System.out.println();
}
}
数组的最大值、求和
@Test
public void test03() {
int[] arr = new int[10];//声明数组
//赋值
//[a,b]区间的随机数:Math.random() * (b - a + 1) + a
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * (99 - 10 + 1) + 10);
System.out.print(arr[i] + "\t");
}
System.out.println();
//求最大值
int maxValue = 0;
for (int i = 0; i < arr.length; i++) {
if (maxValue < arr[i]) {
maxValue = arr[i];
}
}
System.out.println("求最大值:" + maxValue);
//求和
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println("求和:" + sum);
}
数组的复制
//数组的复制
@Test
public void test04() {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * (99 - 10 + 1) + 10);
System.out.print(arr[i] + "\t");
}
System.out.println();
int[] arr1 = new int[arr.length];
for (int i = 0; i < arr1.length; i++) {
arr1[i] = arr[i];
System.out.print(arr1[i] + "\t");
}
}
数组的反转
//数组的反转
@Test
public void test05() {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * (99 - 10 + 1) + 10);
System.out.print(arr[i] + "\t");
}
System.out.println();
for (int i = 0; i < arr.length / 2; i++) {
int temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
冒泡排序
//冒泡排序
@Test
public void test06() {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * (99 - 1 + 1) + 1);
System.out.print(arr[i] + "\t");
}
System.out.println();
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}