Java数组

Java数组

数组:在连续内存上分布的相同类型数据的集合
1.数组的创建:

//动态初始化
数据类型[] 数组名称 = new 数据类型 [长度] { 初始化数据 };
int[] arr = new int[3]{1, 2, 3};

// 静态初始化
数据类型[] 数组名称 = { 初始化数据 };
int[] arr = {1, 2, 3};
//静态初始化的时候, 数组元素个数和初始化数据的格式是一致的

2.数组的使用

2.1数组长度:用数组名.length获取

int[] arr = {1, 2, 3};
// 获取数组长度
System.out.println("length: " + arr.length); 

2.2访问数组元素

int[] arr = {1, 2, 3};
// 获取数组长度
System.out.println(arr[2]); 

要注意,访问数组元素时,下标不能超出【数组长度-1】这个值。
数组下标溢出异常:java.lang.ArrayIndexOutOfBoundsException

2.3数组的遍历
fori语句: 通过下标访问每个元素

int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
  System.out.println(arr[i]);
}

foreach语句:通过迭代得到每个元素

int[] arr = {1, 2, 3};
for (int x : arr) {
  System.out.println(x);
}

3.将数组名作参数
数组名是一种引用
引用相当于一个 “别名”, 也可以理解成一个指针.
创建一个引用只是相当于创建了一个很小的变量, 这个变量保存了一个整数, 这个整数表示内存中的一个地址.

public static void main(String[] args) {
  int[] arr = {1, 2, 3};
  printArray(arr);
}
public static void printArray(int[] a) {
  for (int x : a) {
    System.out.println(x);
 }

函数参数有两种:
(1)基本类型数据
改变的是形参的值,实参不改变。
(2)引用类型数据
形参的值为实参的地址,操作这个地址,实参的值会改变。

4.对数组的常规操作

4.1数组转字符串
将数组以字符串的形式输出

public static String myToString(int[]  arr){
       String ret="[";
       for (int i = 0; i < arr.length; i++) {
		// 借助 String += 进行拼接字符串
		ret += arr[i];
		// 除了最后一个元素之外, 其他元素后面都要加上 ", "
		if (i != arr.length - 1) {
		ret += ", ";
		}
	}
		ret += "]";
		return ret;	
}

4.2.数据的拷贝

int[] arr = {1,2,3,4,5,6};
int[] newArr = Arrays.copyOf(arr, arr.length);
System.out.println("newArr: " + Arrays.toString(newArr));
arr[0] = 10;
System.out.println("arr: " + Arrays.toString(arr));
System.out.println("newArr: " + Arrays.toString(newArr));

copyOf( )函数返回为一个新的数组,将数组进行了 深拷贝, 即又创建了一个数组对象, 拷贝原有数组中的所有元素到新数组中. 因此, 修改原数组, 不会影响到新数组.
深拷贝
新对象地址存的值与旧对象地址存的值相同,但他们是两个存在,因为这两个对象的地址不一样。

浅拷贝
新对象等价于旧对象,因为两个对象的地址一样,一个改变,另一个也改变。
4.2查找数组元素(二分查找)
二分查找的前提是:数组是有序的
二分查找的思路是先取中间位置的元素, 看要找的值比中间元素大还是小. 如果小, 就去左边找; 否则就去右边找.

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

4.3数组逆置
设定两个下标, 分别指向第一个元素和最后一个元素. 交换两个位置的元素.然后让前一个下标自增, 后一个下标自减, 循环继续可.

public static void reverse(int[] arr) {    
  int left = 0;    
  int right = arr.length - 1;     
  while (left < right) {         
	  int tmp = arr[left];         
	  arr[left] = arr[right];         
	  arr[right] = tmp;        
	   left++;         
	   right--;     
	   } 
   } 

5.二维数组
在这里插入图片描述例如数组arr[3][2]:arr[0]中存放的是数组第一行数据第一个元素所在的地址。
打印二维数组元素:Arrays.deepToString(arr)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值