java数组整理

本文详细介绍了Java数组的基础概念,包括一维数组与二维数组的初始化、默认初始化方式、数组的使用及注意事项,并深入探讨了如何利用java.util.Arrays工具类对数组进行高效操作。

题记:

对于java数组的整理,使调理化。个人理解是数组是一个存储数据容器,优点是内存大小可控,这也恰恰是它缺点,容器容量是不变的。解决这问题便是集合。好久好久不用了,有种莫名的感觉……

一、初始化:(定义,分配空间,赋值这三步;注意堆与栈之间的关系,定义---栈,赋值---堆)

1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;

2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;

3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。

参考:http://developer.51cto.com/art/200906/128274.htm

二、二维数组

对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。而且,必须为每个数组元素单独分配空间。

例如:

int a[][] = new int[2][];
		//a[0] = 1; //错误
		a[0] = new int[2];//分配堆空间
			a[0][0] = 1;//真实存值
			a[0][1] = 2;
		a[1] = new int[2];
			a[1][0] = 21;
			a[1][1] = 22;
多维数组在二维数组基础上迭代

理解:

一维数组是一行队列

二维数组是多行队列

三、工具类

java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:(增删改查,多了排序,比较相等

1.给数组赋值:通过fill方法。

2.对数组排序:通过sort方法,升序。(据说是一种优化了算法,反正看源码看的头疼……)

3.比较数组:通过equals方法/hashCode方法比较数组中元素值是否相等。

4.查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作

例如:

int[] array = new int[5];

//填充数组

Arrays.fill(array, 5);

System.out.println("填充数组:Arrays.fill(array, 5):");

TestArrays.output(array);

 

//将数组的第2和第3个元素赋值为8,必须的连续

Arrays.fill(array, 2, 4, 8);

System.out.println("将数组的第2和第3个元素赋值为8:Arrays.fill(array, 2, 4, 8):");

TestArrays.output(array);

 

int[] array1 = {7,8,3,2,12,6,3,5,4};

//对数组的第2个到第6个进行排序进行排序

Arrays.sort(array1,2,7);

System.out.println("对数组的第2个到第6个元素进行排序进行排序:Arrays.sort(array,2,7):");

TestArrays.output(array1);

 

//对整个数组进行排序

Arrays.sort(array1);

System.out.println("对整个数组进行排序:Arrays.sort(array1):");

TestArrays.output(array1);

 

//比较数组元素是否相等

System.out.println("比较数组元素是否相等:Arrays.equals(array, array1):"+"\n"+Arrays.equals(array, array1));

int[] array2 = array1.clone();

System.out.println("克隆后数组元素是否相等:Arrays.equals(array1, array2):"+"\n"+Arrays.equals(array1, array2));

 

//使用二分搜索算法查找指定元素所在的下标(必须是排序好的,否则结果不正确)

Arrays.sort(array1);

System.out.println("元素3在array1中的位置:Arrays.binarySearch(array1, 3):"+"\n"+Arrays.binarySearch(array1, 3));

//如果不存在就返回负数

System.out.println("元素9在array1中的位置:Arrays.binarySearch(array1, 9):"+"\n"+Arrays.binarySearch(array1, 9));

}





细节:

1.java中 数组a  = 数组b  中仅仅是地址的传递,而不是值的复制

import org.junit.Test;

public class ArrayTest {
	
	@Test
	public void add()
	{
		int[] a = new int[5];
		System.out.println(a);
		for(int i=0; i<5; i++)
		{
			System.out.print("第" + i + "=" + a[i]+"; ");
		}
		int[] b = {1,2,3,4,5};
		a = b;//把b赋值给a
		System.out.println(a);
		for(int i=0; i<5; i++)
		{
			System.out.print("第" + i +  "=" + a[i]+"; ");
		}
		a[4]=10;//改变a中元素
		for(int i=0; i<5; i++)
		{
			System.out.print("第b" + i +  "=" + b[i]+"; ");
			//返回中b中的元素也改变了,说明是b给a之是传递了地址
			//而值存在堆中,a,b共用一个堆
		}
		
	}

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值