J2SE_数组学习笔记

来源:互联网 发布:魔兽世界网络卡 编辑:程序博客网 时间:2024/05/17 06:58

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