java 数组

 

 

1.数组
同一种类型数据的集合,其实数组就是一个容器。
数组的好处是可以自动给数组中的元素从0开始编号,方便操作这些元素。

格式1
元素类型[]数组名=new 元素类型[元素的个数或者数组的长度]
格式2
元素类型[]数组名=new 元素类型[]{1,2,3}这种格式为数组的静态初始化
元素类型[]数组名={1,2,3}

内存结构
java程序在运行时,需要在内存中分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈内存
用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存
数组和对象,通过new建立的实例都存放在堆内存中
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不在被使用,会在不确定的时间内被垃圾回收器回收
以及方法区,本地方法区,寄存器三种共五种内存空间。

对于引用类型变量,变量实体是存在堆内的,当变量被引用赋值的时候是将该变量的内存地址赋予到局部变量上。
对于 int []arry=new int[3];
前半部分是定义一个数组类型的变量,存储在栈内存中,后面的new 语句是声明一个引用型变量,在堆内存中开辟内存,=将堆内存中的内存地址赋予栈内存里的数组类型供其引用。当两个数组类型变量同时指向一个引用类型变量时,为其中一个数组类型变量赋值,另一个也会跟着被重新赋值。每new一次就新建一个引用型变量,。

数组中常见的问题
1空指针异常,2引用超出范围

数组中常见操作
遍历

int []arry={1,2,3}
public static void printArry(arry []) {
  for(int i=0;i<arry.length;i++){
    if(i!=arry.length-1)
      System.out.println(arry[i]+";");
    else
      System.out.println(arry[i]);
  }

}

 

获取最值

public static void getMax(int []arry){
  int max=0;
  for(int i=0;i<arry.length;i++){
    if(arry[i]>arry[max])
      arry[max]=arry[i];
    }
    return arry[max];
  }
}

 


选择排序

public static void selectSort(int[]arry){
  for(int x=0;x<arry.length-1;x++){
    for(int y=x+1;y<arry.length;y++){
      if(arry[x]>arry[y]){
        int temp=arry[x];
        arry[x]=arry[y];
        arry[y]=temp;
      }
    }
  }

}

 

冒泡排序

public static void selectSort(int[] arry){
  for(int x=0;x<arry.length-1;x++){
    for(int i=0;i<arry.length-x-1;i++){
      if(arry[i]>arry[i+1]){
        int temp=arry[y];
        arry[y]=arry[y+1];
        arry[y+1]=temp;
      }
    }
  }    
}

 


以上数组位置置换功能的抽取

public static void swap(int []arry,int a ,int b){
  int temp=arry[a];
  arry[a]=arry[b];
  arry[b]=temp;
}

 


数组的查找

public static int search(int []arry,int key){
  for(int i=0;i<arry.length;i++){
    if(arry[i]==key){
      return i;
    }
  }
  return -1;//数组中不存在的时候返回-1
}

 


对于有序数组的折半查找

public static int Search(int[]arry,int a){
  int min=0,max=arry.length-1;
  int mid=(arry.length-1)/2;
  while(arry[mid]!=a){
    if(arry[mid]>a){
      max=mid-1;
    }else if(arry[mid]<a){
      min=mid+1;
    }
    if(min>max)
      return -1;
      mid=(max+min)/2;
   }
  return mid;
}

 

二维数组
矩形数组
int [][]arry=new int[3][2]
锯齿形数组
int [][]arry=new int[2][]
arry[0]=new int[3];
arry[1]=new int[4];
二维数组的求和

int sum=0;
for(int x=0;x<arry.length;x++){
  for(int y=0;y<arry[x].length;y++){
    sum+=arry[x][y];
  }
}

 

posted @ 2015-06-15 08:33  偷月光的贼  阅读(136)  评论(0编辑  收藏  举报