一、数组的特点

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

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;

最新文章

  1. 9.27js拓展、bootstrap菜鸟教程
  2. 无法在提交表单前通过ajax验证解决办法
  3. 函数类型+WINAPI+函数名(例如inline DWORD static WINAPI RecordToKeys(const DRWT&amp; theDRWT,WTSBH* pKey,DWORD dwMaxNum)
  4. log4net 日志写入MongoDB 实现分布式日志
  5. 从四大音乐APP首页设计对比分析产品方向
  6. PowerDesigner 业务处理模型( BPM )
  7. php跨服务器传递对象
  8. Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法
  9. CSS实现导航条Tab切换的三种方法
  10. UI—视图的生命周期
  11. SpringMVC参数绑定(从请求中接受参数)
  12. [DeeplearningAI笔记]ML strategy_1_3可避免误差与改善模型方法
  13. Layer-level的快速算法
  14. JAVA使用log4j(另SSM框架中使用log4j)
  15. nginx下wordpress 固定链接问题
  16. javascript中call、apply、bind详解
  17. jstack Dump 日志文件中的线程状态
  18. php使用jquery Form ajax 提交表单,并上传文件
  19. Spring源码分析(十四)从bean的实例中获取对象
  20. RabbitMQ入门_01_简介与安装

热门文章

  1. SQL语句完成Excel数据导入数据库表中流程方法及注意事项
  2. Javascript中,实现十大排序方法之一(冒泡排序及其优化设想)
  3. Java虚拟机日志与参数
  4. 数据结构与算法—二叉排序树(java)
  5. Executor线程池只看这一篇就够了
  6. 关于sparksql中设置自定义自增列的相关要点(工作共踩过的坑-1)
  7. Springboot源码分析之AbstractAdvisorAutoProxyCreator
  8. Mybatis-plus的使用
  9. slice splice(数组) 和 slice substr substring split (字符串)的区别
  10. CodeForces 1200F