[java] 数组

Java数组详解

数组基本介绍

在大多数的时候,我们仅仅只需要知道:对于一个数组,我们可以创建并组装它,通过使用整型的索引值访问它们的元素,并且它的尺寸不能改变。但是在有的时候是需要在数组上执行更加复杂的操作,并且程序员需要做出决策到底是使用数组还是使用其他容器。

数组与其他种类的容器之间的区别有三方面

  1. 效率
  2. 类型
  3. 保存基本数据类型的能力

在java当中,数组是效率最高的存储和随机访问对象引用序列的方式。
数组是使用[]来访问元素,而List使用的add和get这样的方法。随着包装机制的出现,容器已经可以与数组几乎一样方便地用于基本类型了。数组仅存的优点就是效率。
数组对象保存的是指向对象的引用,每一个引用指向在堆中创建的一个真实对象。"[]"语法是访问数组对象的唯一方式。

多维数组

创建多维的数组很方便。对于基本类型的多维数组,可以用花括号将每个向量分隔开。例如

public class MutidimensionalPrimitiveArray {
	public static void main(String[] args){
		int[][] a = {
			{1,2,3},
			{4,5,6}
	    };
	    System.out.println(Arrays.deepToString(a));
   }
}

打印的结果是[ [1,2,3], [4,5,6] ] . 每对花括号扩起来的集合都会把你带到下一级数组。

数组与泛型

通常数组与泛型不能很好的结合,不能实例话具有参数化类型的数组。但是你可以参数化数组本身的类型.例如:

List<String>[] ls;

这条语句可以通过编译器而不报任何错误。尽管你不能创建实际的持有泛型的数组对象,但是你可以创建非泛型的数组然后将其转型。

Arrays的实用功能

在java.util类库中可以找到Arrays类,它有一套用于数组的static实用方法,其中有六个基本方法。

  1. equals:用于比较两个数组是否相等(deepEquals用于多维数组),
  2. fill:把一个值赋给数组的每一个元素
  3. sort:用于对数组排序
  4. binarySearch: 用于在已经排序的数组中查找元素
  5. toString:产生数组的string表示
  6. hashCode: 产生数组的散列码

此外,Arrays.asList方法接收任意的序列或数组作为其参数,然后将它转变为List容器。
有一个不属于Arrays类但很有用的方法。
复制数组

java的标准类库提供了一个static方法System.arraycopy(),用它复制数组比用for循环复制要快很多。此外,arraycopy方法针对所有类型都做了重载。

arraycopy方法需要的参数有:

  1. 源数组
  2. 表示从源数组中的什么位置开始复制的偏移量
  3. 表示从目标数组中的什么位置开始复制的偏移量
  4. 需要复制的元素个数

System.arraycopy()不会自动包装和自动拆箱,两个数组必须具有相同的确切类型。
数组的比较

Arrays类提供了重载的equals方法,用于比较整个数组。数组相等的条件是元素个数相等,并且对应位置的元素也相等。
数组元素的比较使用了策略模式。在定义做比较的方法时,由你来决定将你的对象与另一个对象作比较的含义。例如,我可以定义比较两个对象的大小,如果当前对象小于参数返回负数,相等返回零,大于返回正值。
如果没有实现Compareable接口,在调用sort方法的时候会抛出ClassCastException这个运行时异常。因为sort方法需要把参数的类型转变为
Comparable。

使用内置的排序方法,就可以对任意的基本类型数组排序,也可以对任意的对象数组进行排序,只要该对象实现了Comparable接口或者具有关联的Comparator。
例如String的排序算法是依据词典编排顺序排序,所以大写字母开头的词都放在前面输出,然后才是小写字母开头的词。

如果数组已经排好序了,就可以使用Arrays.binarySearch执行快速查找。如果对未排序的数组使用Arrays.binarySearch则将会产生不可预料的结果。

当我们编程时,应该优先选择容器而不是数组,只有在已经证明性能成为问题,并且切换到数组对性能提高有帮助时,才应该将程序重构为使用数组。

### Java数组的使用方法 Java中的数组是一种基本的数据结构,用于存储固定大小的相同类型元素。数组的创建和使用在Java中有多种方式,以下是一些常见的操作方法和示例。 #### 创建数组Java中,数组的创建方式主要有以下几种: - **指定大小创建数组**: ```java int[] numbers = new int[5]; // 创建一个长度为5的整型数组 ``` - **初始化数组并赋值**: ```java int[] numbers = new int[]{1, 2, 3, 4, 5}; // 创建并初始化一个整型数组 ``` - **简化方式创建并初始化数组**: ```java int[] numbers = {1, 2, 3, 4, 5}; // 简化方式创建并初始化数组 ``` #### 访问数组元素 数组的索引从0开始,可以通过索引来访问数组中的元素: ```java int[] numbers = {1, 2, 3, 4, 5}; System.out.println(numbers[0]); // 输出第一个元素,即1 ``` #### 修改数组元素 通过索引可以直接修改数组中的元素: ```java int[] numbers = {1, 2, 3, 4, 5}; numbers[0] = 10; // 将第一个元素修改为10 System.out.println(numbers[0]); // 输出10 ``` #### 遍历数组 可以使用循环来遍历数组中的所有元素: ```java int[] numbers = {1, 2, 3, 4, 5}; for (int i = 0; i < numbers.length; i++) { System.out.println(numbers[i]); } ``` #### 数组排序 Java提供了`Arrays.sort()`方法来对数组进行排序。该方法使用快速排序算法对数组进行排序: ```java import java.util.Arrays; int[] numbers = {4, 2, 9, 1, 5, 6}; Arrays.sort(numbers); // 对数组进行排序 System.out.println(Arrays.toString(numbers)); // 输出: [1, 2, 4, 5, 6, 9] ``` #### 多维数组 Java中也支持多维数组,最常见的是二维数组: ```java int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // 访问二维数组中的元素 System.out.println(matrix[0][1]); // 输出2 ``` #### 示例代码:创建、修改和排序数组 以下是一个完整的示例代码,展示了如何创建数组、修改元素、遍历数组以及对数组进行排序: ```java import java.util.Arrays; public class ArrayExample { public static void main(String[] args) { // 创建并初始化数组 int[] numbers = {5, 3, 8, 1, 2}; // 修改数组元素 numbers[0] = 10; // 遍历数组 System.out.println("修改后的数组:"); for (int num : numbers) { System.out.print(num + " "); } // 对数组进行排序 Arrays.sort(numbers); System.out.println("\n排序后的数组:" + Arrays.toString(numbers)); } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值