java中的数组小总结

数组的基本用法

基本用法

动态开辟:数组类型 [ ] 数组名称 = new 数据类型 [ ] {初始化数据}
含义:定义数组的同时进行初始化。

eg:int [ ] array = new int [ ] {1,2,3,4,5};

静态开辟:数据类型 [ ] 数组名称 = {初始化数据};
注意:静态初始化时,数组元素个数和初始化数据的格式是一致的。

eg:int [ ] array  = {1,2,3,4,5};

其他

eg:int [ ] arr = new int [10];

含义:定义数组但是未初始化,默认数组里的值为0.

使用方法

获取数组长度:array.length(数组的一个属性)

System.out.println(array[0]);  //打印下标为0的数组元素

打印数组的三种方式

1.使用for遍历

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

2.使用foreach遍历(foreach中不能使用下标)

for(int x : array){                   //x是数组中的元素,array是要打印的数组名
		System.out.println(x);
	}

3.将数组以字符串形式打印

import    java . util . Arrays
System.out.println(Array.toString(array));

引用类型

引用与c语言中的指针类似,先看下面一个代码:

public static void main(String[] args) { 
 int[] arr = {1, 2, 3}; 
 func(arr); 
 System.out.println("arr[0] = " + arr[0]); 
} 
public static void func(int[] a) { 
 a[0] = 10; 
 System.out.println("a[0] = " + a[0]); 
} 

输出结果为a[0] = 10
        arr[0] = 10
	创建一个引用只是相当于创建了一个很小的变量, 这个变量保存了一个整数, 这个整数表示内存中的一个地址,在上面代码中数组名 arr 是一个 "引用" . 当传参的时候, 是按照引用传参。

System.out.println(array[0]); //输出的是数组的地址,实际上是地址的哈希值(地址是唯一的,哈希码也是唯一的)

初识JVM

程序计数器虚拟机栈本地方法栈方法区

JVM内存区域划分

1.程序计数器:保存下一条执行的指令的地址,非常小。
2.虚拟机栈:就是常说的栈,用来存储局部变量表;
3.本地方法栈:用来调用native方法,保存native方法的局部变量。native方法:是有C/C++实现的方法,一般体现在源码中。
4.:JVM所管理的最大内存区域,一般用来存放对象,使用new创建的对象都是在堆上保存的。
5.方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,方法编译出的字节码就是保存在这个区域(class对象)
6.运行时常量池:存放字符串常量,JDK1.7以前常量池存放在方法区,JDK1.7以后就在堆区。上图就是JDK1.7,常量池存放在方法区。
在上面的图中, 程序计数器, 虚拟机栈, 本地方法栈被很多个 名叫 Thread(线程) 的方框圈起来了,并且存在很多份. 而 堆, 方法区, 运行时常量池, 只有一份.

二维数组

本质上是一维数组。

二维数组的几种定义方法:

   int [][]  array  =  {{1,2,3} , {4,5,6}};
   
   int [][]  array2 = new int [][]{ {1,2,3} , {4,5,6} };
   
   int [][]  array3  =  new int [2][3] ;  定义了一个二维数组,但未初始化,默认为全0。
  不规则数组
 1. int [][]  array4  = new int[2][];{
  	for(i=0;i<array.length;i++{     
  		for(j=0;j<array[i].length;j++)}  //注意遍历列的范围
  	}  
 2.完整打印该不规则数组
       import java.util.Arrays
  		int[][] array5 = {{1,2},{4,5,6}};{
  				array[0] = new int[3];
  				array[1] = new int[5];
  				System.out.println(Arrays.toString(array))
 			}

操作数组的常用类:

import  java.util.+工具类
eg :import java.util.Arrays    Arrays为java中操作数组的工具类
拷贝

4种拷贝方式: 对于数组当中如果是简单类型就是深拷贝; 数组当中如果是引用类型用以下类型进行拷贝就是浅拷贝; 对引用类型进行深拷贝时,代码的写法要改变

1.for
2.arraycopy
(Object src,int srcPos,Object dest,int destPos,Int length)

src代表源数组
srcPos:从源数组的pos位置开始拷贝
dest:目的地数组
desPos:目的地数组的位置
length:拷贝的长度

3.copyof
copyof(int[] original(源数组),int newLength(拷贝长度))

Arrars.copyOf:底层调用的是System.Arrsys.copyOf
4.array.clone(数组名.clone)

数组名为要拷贝的数组。clone是Object的方法,返回一个副本

学习array中的方法

Arrays.toString                     //以字符串形式打印数组
Array.copyOf                        //拷贝
Array.binarySearch                  //二分查找
Array.copyOfRange(array,from,to)    //拷贝部分数组
Arrays.equal                        //判断数组是否相同
Arrays.fill(array,2,69)           //把数组的内容 [2,6) 填充为9
Arrays.sort                         //排序
  

几种代码

可变参数编程
public class TestDemo1{
    public static void main(String[] args){
        System.out.println(Sum(1,2,3,4,5));
        System.out.println(Sum(1,2,3));
    }
    public static int Sum(int... array){  //注意:三个点
        int ret = 0;
        for(int x:array){
            ret += x;
        }return ret;
    }
}
匿名数组
public class TestDemo1{
    public static void main(String[] args){
       System.out.println(Sum(new int[]{1,2,3,4,5,6}));//这里创建了一个匿名数组
    }
    public static int Sum(int... array){
        int ret = 0;
        for(int x:array){
            ret += x;
        }return ret;
    }
}

1、匿名数组没有名字
2、匿名数组与普通的数组创建完数组后不会存储在任何一个变量上。
3、使用匿名数组只是创建、初始化、应用,因为没有名字因此没法重用它。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值