数组
数组是相同类型数据的有序集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ROvqVrMa-1653837753234)(/Users/tk/Desktop/img/image-20220518164411308.png)]
三种初始化状态
package array;
public class Demo02 {
public static void main(String[] args) {
//静态初始化
int[] a = {1, 2, 3, 4, 5, 6, 7, 8};
//动态初始化:包含默认初始化
int[] b = new int[10];
b[0] = 10;
//
System.out.println(a[0]);
}
}
数组的4个基本特点
1.其长度是确定的。
2.其元素类型必须相同
3.数组中的元素可以是任何数据类型,包括基本类型和引用类型
4.数组变量属引用类型
5.数组本身就是对象
数组对象本身是在堆中的
数组边界
数组是相同类型的有序集合
数组使用
package array;
public class Demo03 {
public static void main(String[] args) {
int[] arrays = {1, 2, 3, 4, 5};
//打印全部的数组元素
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
//查找最大元素
System.out.println("==============");
int max = arrays[0];
for (int i = 0; i < arrays.length; i++) {
if (arrays[i] > max) {
max = arrays[i];
}
}
}
}
多维数组
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SxMRAtji-1653837753235)(/Users/tk/Desktop/img/image-20220518170745300.png)]
数组的声明与创建
package array;
/**
* 数组的声明与创建
*/
public class Demo01 {
public static void main(String[] args) {
//声明一个数组
int[] nums;
//创建一个数组
nums=new int[10];
//给数组元素中赋值
for (int i = 0; i < nums.length; i++) {
nums[i]=i;
}
//遍历数组中的元素
for (int x :nums){
System.out.println(x);
if(x==5){
System.out.println("hhhhhhhhh");
break;
}
}
}
}
初始化
package array;
public class Demo02 {
public static void main(String[] args) {
//静态初始化
int[] a = {1, 2, 3, 4, 5, 6, 7, 8};
//动态初始化:包含默认初始化
int[] b = new int[10];
b[0] = 10;
//
System.out.println(a[0]);
}
}
反转数组
package array;
public class Demo03 {
public static void main(String[] args) {
int[] arrays = {1, 2, 3, 4, 5};
//打印全部的数组元素
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
//查找最大元素
System.out.println("==============");
int max = arrays[0];
for (int i = 0; i < arrays.length; i++) {
if (arrays[i] > max) {
max = arrays[i];
}
}
//================
for (int array : arrays) {
}
}
public static int[] reverse(int[] arrays) {
//反转数组
int[] ints = new int[arrays.length];
for (int i = 0, j = ints.length - 1; i < arrays.length; i++) {
ints[j] = arrays[i];
}
return ints;
}
}
Arrays
package array;
import java.util.Arrays;
public class Demo05 {
public static void main(String[] args) {
// Arrays
int[] a = {3, 4, 567, 8564, 4, 5, 7,};
// System.out.println(Arrays.toString(a));
// printArray(a);
//排序
Arrays.sort(a);
//填充
Arrays.fill(a,0);
System.out.println(Arrays.toString(a));
}
public static void printArray(int[] a){
for (int i = 0; i < a.length; i++) {
if(i==0){
System.out.print("[");
}
if(i==a.length-1){
System.out.print(a[i]+"]");
}
System.out.print(a[i]+",");
}
}
}
冒泡排序
package array;
/**
* 冒泡排序
*
* 时间复杂度(On2)
*/
public class Demo06 {
public static void main(String[] args) {
}
// 1.比较数组中两个相邻的元素,如果第一个比第二个大,就交换他们的位置
// 2.每一次比较,都会产生一个最大,或者最小的数字
// 3.下一轮侧可以少一次排序
// 4.依此循环,直到结束
public static int[] sort(int[] array) {
//临时变量
int temp = 0;
for (int i = 0; i < array.length - 1; i++) {
boolean flag =false;
//内存循环
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j + 1] > array[j]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
if(flag==false){
break;
}
}
return array;
}
}
稀疏数组
package array;
/**
* 稀疏数组
*/
public class Demo07 {
//需求:编写五子棋游戏中,有存盘退出和续上盘的功能
//分析问题:因为改二维数组的很多值是默认0,因此记录了很多没有意义的数据
//解决: 稀疏数组
/*
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
*/
public static void main(String[] args) {
int[][] ints = new int[11][11];
ints[1][2] = 1;
ints[2][3] = 2;
System.out.println("输出原始数组");
for (int[] anInt : ints) {
for (int i : anInt) {
//展示出数组
System.out.print(i + "\t");
}
System.out.println();
}
System.out.println("===================");
//转化为稀疏数组
//获取有效值的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (ints[i][j] != 0) {
sum++;
}
}
}
System.out.println("有效值的个数 " + sum);
//2.创建一个稀疏数组的数组
int[][] ints2 = new int[sum + 1][3];
ints2[0][0]=11;
ints2[0][1]=11;
ints2[0][2]=sum;
//遍历二维数组,将非0的值存放到稀疏数组中
int count =0;
for (int i = 0; i < ints.length; i++) {
for (int j = 0; j < ints[i].length; j++) {
if(ints[i][j]!=0){
count++;
ints2[count][0]=i;
ints2[count][1]=j;
ints2[count][2]=ints[i][j];
}
}
}
//输出稀疏数组
System.out.println("输出稀疏数组");
for (int i = 0; i < ints.length; i++) {
System.out.println(ints2[i][0]+"\t"
+ints2[i][1]+"\t"
+ints2[i][2]+"\t");
}
}
}