码迷,mamicode.com
首页 > 编程语言 > 详细

正确应用Java数组

时间:2019-09-18 01:09:44      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:函数   array   binary   包装   初始   序列   对象类型   数组初始化   的区别   

一、数组的特点

数组与其他容器的区别有三方面:效率、类型和保存基本类型的能力。

1、效率。数组是一种效率最高的存储和随机访问对象引用序列的方式。数组是一段连续地址空间内的线性序列,所以访问非常快。但也要付出点代价,数组对象的大小一旦创建就不能改变。

2、类型。出现泛型之前,只有数组能够保持有类型的对象引用,其他容器只能保存Object的引用。

3、保存基本类型。数组直接保存基本类型的值,使用其他容器需要转换成包装类,效率大大下降。数组在连续的地址空间中保存基本类型的值,对象则保存其引用。

 

二、数组的初始化


1、数组是第一级引用
无论使用哪种类型的数组,数组标识符其实只是一个对象的引用,该对象用来保存数组的值,只读成员length是该对象唯一可以访问的字段。数组对象可以使用new关键字显式创建,也可以使用数组初始化语法隐式创建。
方法需要返回多个值时,可以返回一个数组。这在C语言里面是不行的,C语言里面离开函数创建的数组就被销毁了。

2、一维数组创建

int[] a = new int[10]; //指定空间大小
int[] a = {3,4,5,6,7,19,20};//隐式创建数组,只能用来定义。不能作为参数传递。
int[] a = new int[]{7,9,30,2,19};//可作为参数传递。

 

3、多维数组创建
Java的多维数组是粗糙数组。即不要求低维度的数组长度保持一致。

int[][][] a = new int[10][][];
int[][] a = {{1,2,3,4,5},{8,9,10}};//各维度用{}括起来。
int[][] a = new int[][]{{8,9,4},{3,4,5,6,9}};

 

4、数组与泛型
不能实例化具有参数化类型的数组。

List<String>[] ls = new ArrayList<String>[10];//无效的定义
//可以如下定义
List<String>[] ls = (List<String>[]) new ArrayList[10]; //强制转换。

 

三、Arrays的使用

1、fill()
对所有的元素填充同一个值,对象填充对象的引用。

int[] a = new int[10];
Arrays.fill(a, 10);//填充10
Integer[] a = new Integer[10];
Arrays.fill(a, new Integer(10));//填充10

 

2、equals()
比较两个数组是否相同,条件是数组的长度和每个元素都相同。

 

3、sort()
对数组排序,基本类型的只能按升序。

int[] a = new int[]{3,4,5,2,1,7,9,8,10};
Arrays.sort(a);//升序排列

对象类型数组排序有两种方式。

方式1:类可以比较
class T implements Comparable{
	int s;
	int e;
	public T(int s, int e){
		this.s = s;
		this.e = e;
	}
	public int compareTo(T t){
		return this.s - t.s; //大于0则交换位置
	}
}

T[] a = new T[10];
Arrays.sort(a);

方式2:给类一个比较器
class T{
	int s;
	int e;
	public T(int s, int e){
		this.s = s;
		this.e = e;
	}
}

import java.util.Comparator;
T[] a = new T[10];
Arrays.sort(a, (x, y)-> x.s - y.s);//lambda表达式

 

4、binarySearch()
二分查找,对有序数组进行查找,对象调用比较器或者该对象可比。

Arrays.binarySearch(a, r, (x, y) -> x.s - y.s);//r为待查找的对象。

未找到返回一个负数。

 

5、asList
接收一个序列,或者数组。返回一个List;

 

正确应用Java数组

标签:函数   array   binary   包装   初始   序列   对象类型   数组初始化   的区别   

原文地址:https://www.cnblogs.com/suen061/p/11537994.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!