Java中的数组

数组的定义

数组:相同类型数据元素的集合,内存是连续的

数组初始化

int[] array1={1,2,3,4,5};
int[] array2=new int[]{1,2,3,4,5};
int[] array3=new int[5]; new产生一个对象。

“引用”:用来存放对象的地址
注意
1.当数组越界之后:数组越界异常 运行期间
java.lang.ArrayIndexOutOfBoundsException;
2.数组名.length:数组的长度。length不是方法,是一个属性;
3.使用 [ ] 按下标取数组元素。需要注意, 下标从 0 开始计数;
4.使用 [ ] 操作既能读取数据, 也能修改数据;
5.当定义好数组之后,没有初始化,默认值为0;
数组中如果是引用,则默认为NULL。

JVM内存区域划分

**
1.Java虚拟机栈:局部变量
2.本地方法栈:native方法:底层由c/c++实现,特点:快
3.程序计数器:指令
4.:对象(关键字)
5.方法区:静态变量 类的信息
常量池:作用-》存放字符串常量的 String str=“hello”;
在JavaJDK之前,常量池在方法区中
从JDK1.7开始,常量池被挪到了堆当中
null:是所有引用类型的初始值。

int[] array=null;//长度为0
System.out.println(array.length);
java.lang.NullPointerException;空指针异常
System.out.println(Array.toString(array));将数组以字符形式进行输出

注意:
(1)局部变量和引用保存在栈上, new 出的对象保存在堆上.
(2)堆的空间非常大, 栈的空间比较小.
(3)堆是整个 JVM 共享一个, 而栈每个线程具有一份(一个 Java 程序中可能存在多个栈)

遍历数组方法

1.for循环

for (int i = 0; i < array.length; i++) {    
System.out.println(array[i]); 
}

2.for-each循环

for (int x : arr) {    
System.out.println(x); 
}

打印数组

1.for循环

 for (int x : a) {        
 System.out.println(x);    
 }

2.toString()方法(以字符串形式打印数组)

 System.out.println(toString(arr)); 

拷贝数组

1.System.arraycopy();
2.Array.copyOf() 方法内部调用了System.arraycopy();
3.数组名.clone():数组名:拷贝的数组-》原数组
4.for();
以上4种拷贝方式,对数组当中如果是简单类型,那么就是深拷贝
如果数组当中存放的是引用类型,那么这4种拷贝方式,就是浅拷贝
如果是两个引用,同时指向一个对象,那么通过一个引用,修改当前对象的值后,那么另一个引用,也会受到影响,这就是浅拷贝。

关于数组的一些方法

求数组中最大的元素

public static int findMax(int[] array){
    int max=array[0];
    for(int i=0;i<array.length;i++){
        if(max<array[i]){
            max=array[i];
        }
    }
    return max;
}

求数组中最小的元素

public static int findMin(int[] array){
    int min=array[0];
    for(int i=0;i<array.length;i++){
        if(min>array[i]){
            min=array[i];
        }
    }
    return min;
}

求数组元素的平均值

public static int average(int[] array){
    int sum=0;
    for(int i=0;i<array.length;i++){
        sum+=array[i];
    }
    return sum/array.length;
}

数组逆序

public static int[] reverse(int[] array) {
    int left=0;
    int right=array.length-1;
    while(left<right){
        int temp=array[left];
        array[left]=array[right];
        array[right]=temp;
        left++;
        right--;
    }
    return array;
}

查找数组中指定元素

//无序数组
public static int find(int[] arr, int key){
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == key){
                return i;
            }
        }
        return -1;//未找到
    }
 //有序数组
 public static int binarySearch(int[] arr, int key){
        int left = 0;
        int right = arr.length - 1;
        while(left < right){
            int mid = (left + right) >> 1;
            if(key < arr[mid]){
                right = mid - 1;
            }
            else if(key > arr[mid]){
                left = mid + 1;
            }
            else{
                return mid;
            }
        }
        return -1;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值