J2SE_数组学习笔记


1. 如何定义一个数组?
(1) int[] a ;
(2) int a[] ;
其中:
int 表示数组中存放的元素为int类型
[] 表示数组
a为数组名称
2. 如何初始化一个数组
动态和静态(常用是静态)
动态: 给出数组的长度,初始化值由系统自动分配
数据类型[] 数组名 = new 数据类型[数组长度];
静态:初始化时指定每个数组元素的初始值,由系统决定数组长度。
数据类型[] 数组名 = new 数据类型[] {数组值1,数组值2...}
简化版本为: 数据类型[] 数组名 = {数组值1,数组值2...}
例如: 
int [] a = new int{3};
int[] a = new int[]{1,3,4}; 
简化后:int[] a = {1,3,4};
注意:不能在给定系统长度的同时给数组初始化
3. JAVA中的内存分配:
Java在程序运行时,需要在内存中分配空间,为了提高效率,对空间进行了区域划分,每一片区域都有特定的处理数据方式和内存管理方式。
栈  存储局部变量
堆  存储new出来的东西
方法区
本地方法区(和系统相关)
寄存器(给CPU相关)
后面两个是JAVA不能修改的,重点讲解前三块。
局部变量:在方法定义中或者方法声明上的变量称为局部变量
堆内存的特点:
A:每一个new出来的东西都有地址值
B:每个变量都有默认值
     byte,short,int,long   0
     float,double             0.0
     char       '\u0000'
     boolean  false
     引用类型  null
C: 使用完毕就变成垃圾,但是没有立即回收,需要等垃圾回收器空闲的时候进行回收。

4.动态数组Demo
练习一:
定义一个数组,无初始化和有初始化的输出

练习二:定义两个数组,分别输出两个数组各自的数组名及元素值
然后给每个数组的元素重新赋值,再次分别数组两个数组的数组名和元素值

练习三:
定义第一个数组,定义完毕后,给数组元素赋值,赋值完毕后,再输出数组名称和元素值;
定义第二个数组,定义完毕后,给数组元素赋值,赋值完毕后,再输出数组名称和元素值;
定义第三个数组,把第一个数组的地址值赋值给它,通过第三个数组的名称去把数组元素赋值,再次输出第一个数组数组名称和元素。











5. 静态数组练习
练习一:静态数组初始化
6. 数组操作的常见两个小问题
ArrayIndexOutOfBounds  数组索引越界异常
原因:访问了不存在的索引
NullPointerException 空指针异常
原因:数组已经不在指向堆内存,仍然用数组名来访问元素会报错
7. 数组的综合练习
综合练习一:数组元素的遍历
功能:以此输出数组中的每一个元素
注意:数组提供了一个属性length,用于获取数组的长度
格式:数组名.长度
数组元素的下标从0开始,利用属性length获取数组的长度
格式:数组名.length 返回数组的长度
 /*遍历数组的方法
 两个明确:
      返回值类型:void
   参数列表: int[] arr
 */
 public static void printArray(int[] arr)
 {
  for(int x = 0;x<arr.length;x++)
  {
   System.out.println(arr[x]);
        }
 }


 /*遍历数组的方法(改进)
 两个明确:
      返回值类型:void
   参数列表: int[] arr
 */
 public static void printArray2(int[] arr)
 {
  for(int x = 0;x<arr.length;x++)
  {
   if(x == arr.length-1)
   System.out.println(arr[x]);
   else
       System.out.println(arr[x]+",");
        }
 }
/*综合练习二:获取数组最大值和最小值*/
 public static void MaxMinArray(int[] arr1)
 {
  int[] arr = {10,20,30,40,50};
  int maxVal,minVal;
  maxVal = arr[0];
  minVal = arr[0];
  //获取数组最大值
  for(int x = 1;x<arr.length;x++)
  {
   if(arr[x] > maxVal)
   maxVal = arr[x];
      if(arr[x] < minVal)
   minVal = arr[x];
     }
  System.out.println(maxVal+"---"+minVal);
 }

 /*综合练习三: 数组元素逆序(把数组元素对调)
 A分析:定义一个数组,静态初始化
 B思路: 把1索引和arr.length-1数据交换
         把2索引和arr.length-2数据交换
   ......
   只要做到arr.length/2的时候即可。
    两个明确:
      返回值类型:void(不需要返回逆序后的数组,因为数组实际上是引用变量,传入的数组和逆序后的数组为同一个数组
   参数列表:数组名int[] arr
    */
 public static void reversePrint(int[] arr)
 {
  int temp = arr.length/2;
  int tempVal;
  for (int x = 0;x<=temp ;x++ )
  {
   tempVal = arr[x];
   arr[x] = arr[arr.length-1-x];
   arr[arr.length-1-x] = tempVal;
  }
 }
 public static void reversePrint2(int[] arr)
 {
  int startIndex = 0;
  int endIndex = arr.length -1;
  int tmp;
  while(startIndex<endIndex)
  {
    tmp = arr[startIndex];
    arr[startIndex] = arr[endIndex];
    arr[endIndex] = tmp;
    startIndex++;
    endIndex--;
  }
 }

 /*综合练习四:查找数据1
   根据键盘录入索引,查找对应星期*/
    public static void searchDate()
 {
  String[] strArr = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
  Scanner sc = new Scanner(System.in);
  System.out.println("请输入一个数据0-6");
  int index = sc.nextInt();
  System.out.println("日期为:"+strArr[index]);
 }

    /*综合练习五:查找数据2
   查找指定元素第一次在数组中出现的索引
   思路:定义一个数组,静态初始化
   写一个功能:遍历数组,依次获取数组中的每一个元素,和已知的数据进行比较
   如果相等,返回当前的索引值
   明确:
       返回值类型: int
    参数列表: int[] arr,int data
    注意:
        如果查找的数据在数组中不存在,找不到数据,一般用负数表示不存在,一般为-1
     只要是判断if就有可能有false值存在,需要细心
   */
    public static int getFirstLoc(int[] arr,int data)
 {
  for(int x = 0;x<arr.length;x++)
  {
   if (arr[x] == data)
   return x;
   
  }
  return -1;
 }
 public static int getFirstLoc2(int[] arr,int data)
 {
  //定义一个索引
  int index = -1;
  for(int x = 0;x<arr.length;x++){
   if(arr[x] == data){
    index = x;
    break;
   }
  }
  //返回index
  return index;
 }
8. 数组学习总结:
(1)数组:存储同一种数据类型的多个元素的容器。
 (2)特点:每一个元素都有编号,从0开始,最大编号是长度-1。
          编号的专业叫法:索引
 (3)定义格式
  A:数据类型[] 数组名;
  B:数据类型 数组名[];
 
  推荐是用A方式,B方法就忘了吧。
  但是要能看懂
 (4)数组的初始化
  A:动态初始化
   只给长度,系统给出默认值
   
   举例:int[] arr = new int[3];
  B:静态初始化
   给出值,系统决定长度
   
   举例:int[] arr = new int[]{1,2,3};
   简化版:int[] arr = {1,2,3};
 (5)Java的内存分配
  A:栈 存储局部变量
  B:堆 存储所有new出来的
  C:方法区(面向对象部分详细讲解)
  D:本地方法区(系统相关)
  E:寄存器(CPU使用)
 
  注意:
   a:局部变量 在方法定义中或者方法声明上定义的变量。
   b:栈内存和堆内存的区别
    栈:数据使用完毕,就消失。
    堆:每一个new出来的东西都有地址
        每一个变量都有默认值
      byte,short,int,long 0
      float,double 0.0
      char '\u0000'
      boolean false
      引用类型 null
        数据使用完毕后,在垃圾回收器空闲的时候回收。
 (6)数组内存图
  A:一个数组
  B:二个数组
  C:三个数组(两个栈变量指向同一个堆内存)
 (7)数组的常见操作
  A:遍历
   方式1:
    public static void printArray(int[] arr) {
     for(int x=0; x<arr.length; x++) {
      System.out.println(arr[x]);
     }
    }
   
   方式2:
    public static void printArray(int[] arr) {
     System.out.print("[");
     for(int x=0; x<arr.length; x++) {
      if(x == arr.length-1) {
       System.out.println(arr[x]+"]");
      }else {
       System.out.println(arr[x]+", ");
      }
     }
    }
  B:最值
   最大值:
    public static int getMax(int[] arr) {
     int max = arr[0];
     
     for(int x=1; x<arr.length; x++) {
      if(arr[x] > max) {
       max = arr[x];
      }
     }
     
     return max;
    }
   
   最小值:
    public static int getMin(int[] arr) {
     int min = arr[0];
     
     for(int x=1; x<arr.length; x++) {
      if(arr[x] < min) {
       min = arr[x];
      }
     }
     
     return min;
    }
  C:逆序
   方式1:
    public static void reverse(int[] arr) {
     for(int x=0; x<arr.length/2; x++) {
      int temp = arr[x];
      arr[x] = arr[arr.length-1-x];
      arr[arr.length-1-x] = temp;
     }
    }
   
   方式2:
    public static void reverse(int[] arr) {
     for(int start=0,end=arr.length-1; start<=end; start++,end--) {
      int temp = arr[start];
      arr[start] = arr[end];
      arr[end] = temp;
     }
    }
  D:查表
    public static String getString(String[] strArray,int index) {
     return strArray[index];
    }
  E:基本查找
   方式1:
    public static int getIndex(int[] arr,int value) {
     for(int x=0; x<arr.length; x++) {
      if(arr[x] == value) {
       return x;
      }
     }
     
     return -1;
    }
   
   方式2:
    public static int getIndex(int[] arr,int value) {
     int index = -1;
   
     for(int x=0; x<arr.length; x++) {
      if(arr[x] == value) {
       index = x;
       break;
      }
     }
     
     return index;
    }
         







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值