Java数组详解

版权声明:本文为博主原创文章,未经博主允许不得转载。

数组:数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序顺序排列组合而成。其中,每一个数据作一个元素,每个元素可以通过一个索引(下标)来访问他们。

数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量

数组基本特点:

1.长度是确定的。数组一旦被创建,它的大小就是不可以改变的。

2.其元素必须是相同类型,不允许出现混合类型。

3.数组类型可以是任何数据类型,包括基本类型和引用类型

数组的声明方式

type[] arr_name;//推荐使用方式
type   arr_name[];

定义数组,给数组赋值,当给创建数组时,栈内存中有变量,堆内存什么都没有,当给数组分配空间10以后,才会在堆内存中给数组真的分配空间。

注意:数组长度为0与null不相同

创建引用类型的一维数组

数组的初始化方式分为三种:静态初始化,动态初始化,默认初始化

//静态初始化
int[] a={1,2,3,4,5,6,7,8,9,11,12,32,43,,54,34,35};

数组默认初始化与成员变量默认初始化相同

数组遍历

增强for循环:for-each是JDK1.5新增的功能,专门用于读取数组或集合中所有元素,即对数组进行遍历。但是不能修改数组或集合中元素的值

ss代表要遍历的数组,temp时一个中间临时变量。

增强for循环不能遍历二维数组,要想访问多维数组的所有元素,就要用到嵌套。

二维数组

public class Test01{

    public static void main(String[] args){
        //静态初始化
        int[][] a={
        
            {1,2},
            {3,4,0,9},
            {5,6,7}    
        }
        //动态初始化
         int[][] a=new int[3][];
         a[0]=new int[2];
         a[1]=new int[4];
         a[1]=new int[3];
         a[0][0]=new int[1]; 
         a[0][1]=new int[2];
  
         a[1][0]=new int[3];  
         a[1][1]=new int[4];  
         a[1][2]=new int[0];  
         a[1][3]=new int[9];
  
         a[2][0]=new int[5];  
         a[2][1]=new int[6];  
         a[2][2]=new int[7];  
  
    }
}

二维数组的内存分析

二维数组例子:矩阵的运算

public class Materix{

    public static void main(String[] args){
        
        int[][] a={
            {1,2},{2,4}
        };
        
        int[][] a={
            {3,4},{5,6}
        };
        
        int[][] c=new int[2][2];
        for(int i=0;i<c.length;i++){
            for(int j=0j<c.length;j++){
                c[i][j]=a[i][j]+b[i][j]
            }
        }
        
    }
}

实际上java中没有多维数组,只有一维数组,因为多维数组被解释为“数组的数组”,而这也正是java的一个优势所在。

 

在java.util.Arrays类下有很多对数组操作的方法,具体请看java的API,里面会有对方法使用的详细解释。

数组的拷贝,用System类中的arratcopy方法,java.util.Arrays包含了操作数组的各种方法,比如搜索、排序,aList方法用于将数组转换成集合。

Arrays.sort(a)数组的排序,Arrays.toString(a)打印数组   数组的填充  Arrays.file(a,2,4,100);将2到4索引的元素替换为100

二分查找法 

//二分法查找的前提是:数组的顺序必须是已经排好的
public class TestBinarySearch{
    public static void main(String[] args){

        System.out.println(args[1]);
        int[] arr={234,245,77,3,543,67,78,95,378,205,369,703,251}
        int searchWord=6780;//所要查找的数
        int searchCount=0;//循环的次数

        System.out.println("普通循环查找%d的次数是%d",searchWord,genetalLoop(arr,searchWord));
 System.out.println("二分法查找%d的次数是%d",searchWord,binarySearch(arr,searchWord));

        static int genetalLoop(int[] arr,int searchWord){
            // 普通循环发,最好需要比较一次,比如查找1;
            int searchCount=0; 
        for(int 1=0;i<arr.length;i++){
                
                searchCount++;
                if(searchWord==arr[i])
                break;
            }
          return searchCount;
        }
    }

    static int binarySearch(int[] arr,int searchWord){

        Arrays,sort(arr);//首先对传进来的数组进行排序
        //二分查找法
        int index=0;//相当于指针的东西
        int iStart=0;
        int iEnd=arr.length;
        int searchCount=0;
        for(int i=0;i<arr.length/2;i++){
            searchCount++;
            index=(iStart+iEnd)/2;
            if(arr[index]<searchWord){
                iStart=index;
            }else if (arr[index]>searchWord){
                iEnd=index
            }else{break;}
        }
      return searchCount;
    }


}

 

冒泡排序法

public class Test{

        public static void main(String[] args){

        int[] values={2,1,0,5,9,7,6,3,15,21};
        sort(values);
    System.out.println(Arrays.toString(values));
    }

    public static void sort(int[] values){
        int temp;
        for(int i=0;i<values.length;i++){
            for(int j=0;j<values.length-1-i;j++){
                if(values[j]>values[j+1]){
                temp=values[j];
                values[j]=values[j+1];
                values[j+1]=temp;
                }
            }
        }
    }
}

//从小到到达排序,会先将最大的找出来,放到最后;从大到小排列,会先将最小的找出来放放到最后
//第一次完全把数组遍历一次,把最小的找出来了,再遍历一次会把比最小的大一个的数找出来,以此类推。

转载请注明出处!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值