【Java笔记】08 数组

一、介绍

数组存放多个同一类型的数据,是引用类型

  • 数组的定义
    数据类型[] 数组名 = new 数据类型[大小]
    int[] a = new int[5];

先声明,再创建
声明:数据类型 数组名[];或 数据类型[] 数组名;此时为null
创建:数组名=new 数据类型[大小];

静态初始化
数据类型 数组名[]={元素值,元素值,…}

  • 注意
    1.数组创建后,如果没有赋值,有默认值 int 0,short 0,byte 0,long 0 ,float 0.0,double 0.0,char \u0000,boolean false,String null
    2.数组属引用类型,数组型数据是对象(object)

二、数组赋值机制

数组在默认情况下是引用传递,赋的值是地址——>赋值方式为引用传递

  1. //arr2变化会影响到arr1
  2. int[] arr1 = {1,2,3};
  3. int[] arr2 = arr1;
  4. arr2[0] = 10;
  5. //arr1={10,2,3}

【Java笔记】08 数组 - 图1

三、应用

排序

  1. 内部排序:所有数据加载到内存
  2. 外部排序:借助外部存储
  • 冒泡排序
    通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素 的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部
  1. //数组[24,69,80,57,13]
  2. //第一轮 最大数放最后 24,69,80,57,13->24,69,80,57,13->24,69,57,80,13->24,69,57,13,80
  3. //第二轮 第二大的数放在倒数第二位置 24,69,57,13,80->24 57 69 13 80->24 57 13 69 80
  4. //第三轮 第三大的数放在倒数第三位置 24 57 13 69 80->24 13 57 69 80
  5. //第四轮 第四大的数放在倒数第四位置 13 24 57 69 80
  6. public class BubbleSort {
  7. public static void main(String []args) {
  8. int[] arr = {24,69,80,57,13};
  9. int temp = 0;
  10. for(int i=0;i<arr.length-1;i++){
  11. for(int j = 0;j < arr.length-1-i;j++){
  12. if(arr[j] > arr[j + 1]){
  13. temp = arr[j];
  14. arr[j] = arr[j + 1];
  15. arr[j+1] = temp;
  16. }
  17. }
  18. System.out.println("\n==第"+(i+1)+"轮==");
  19. for(int j=0;j < arr.length;j++){
  20. System.out.print(arr[j]+"\t");
  21. }
  22. }
  23. }
  24. }

查找

顺序查找

  1. import java.util.Scanner;
  2. //顺序查找
  3. public class SeqSearch {
  4. public static void main(String []args) {
  5. /*有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:
  6. 从键盘中任意输入一个名称,判断数列中是否包含此名称【顺序查找】
  7. 要求: 如果找到了,就提示找到,并给出下标值
  8. */
  9. String[] names = {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};
  10. Scanner myScanner = new Scanner(System.in);
  11. System.out.println("请输入名字");
  12. String findName = myScanner.next();
  13. int index = -1;
  14. for(int i = 0; i < names.length; i++) {
  15. //比较 字符串比较 equals, 如果要找到名字就是当前元素
  16. if(findName.equals(names[i])) {
  17. System.out.println("恭喜你找到 " + findName);
  18. System.out.println("下标为= " + i);
  19. //把 i 保存到 index
  20. index = i;
  21. break;//退出
  22. }
  23. }
  24. if(index == -1) {
  25. //没有找到
  26. System.out.println("sorry ,没有找到 " + findName);
  27. }
  28. }
  29. }

四、多维数组

【Java笔记】08 数组 - 图2
列数不确定初始化

  1. public class MyClass {
  2. public static void main(String args[]) {
  3. int[][] arr = new int[3][];
  4. for(int i=0;i < arr.length;i++){
  5. arr[i] = new int[i+1];
  6. for(int j = 0;j < arr[i].length;j++){
  7. arr[i][j] = i+1;
  8. }
  9. }
  10. for (int i = 0;i<arr.length;i++){
  11. for(int j=0;j<arr[i].length;j++){
  12. System.out.print(arr[i][j]+" ");
  13. }
  14. System.out.println();
  15. }
  16. }
  17. }

int[] x,y[];
x是int类型的一维数组,y是int类型的二维数组(int[] y[])

  • String[] str = new String[]{“a”,”b”,”c”};//ok
  • int[] str = new int[]{1,2,3};//ok
  1. public class Insert{
  2. public static void main(String[] args){
  3. /*
  4. 已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序的
  5. [10,12,45,90]->[10,12,23,45,90]
  6. 数组扩容+定位
  7. */
  8. int[] arr = {10,12,23,45,90};
  9. int insertNum = 23;
  10. int index = -1;//将要插入的位置
  11. //遍历arr,if insertNum<=arr[i],i就是插入位
  12. //if 遍历完没有 insertNum<=arr[i],index=arr.length
  13. for(int i=0;i<arr.length;i++){
  14. if(insertNum <= arr[i]){
  15. index = i;
  16. break;
  17. }
  18. }
  19. if(index == -1){
  20. index = arr.length;
  21. }
  22. int arrNew = new int[arr.length+1];
  23. for(int i=0,j=0;i<arrNew.length;i++){
  24. if(i != index){
  25. arrNew[i] = arr[j];
  26. j++;
  27. }else{
  28. arrNew[i] = insertNum;
  29. }
  30. }
  31. arr = arrNew;
  32. for(int i = 0;i<arr.length;i++)
  33. System.out.println(arr[i]);
  34. }
  35. }