正确应用Java数组
一、数组的特点
数组与其他容器的区别有三方面:效率、类型和保存基本类型的能力。
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数组的更多相关文章
- 如何正确的把 Java 数组 Array 转为列表 List
最近想把 java 数组转成 List,网上普遍的答案都是 Arrays.asList: String[] a = new String[] {"hello", "wor ...
- 如何正确使用Java泛型
前言 Java 1.5之前是没有泛型的,以前从集合中读取每个对象都必须先进行转换,如果不小心存入集合中对象类型是错的,运行过程中转换处理会报错.有了泛型之后编译器会自动帮助转换,使程序更加安全,但是要 ...
- 关于JAVA数组的几点注意事项与一些低级错误
1.数组不是集合,它只能保存同种类型的多个原始类型或者对象的引用.数组保存的仅仅是对象的引用,而不是对象本身. 2.数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型 ...
- Java-杂项:Java数组Array和集合List、Set、Map
ylbtech-Java-杂项:Java数组Array和集合List.Set.Map 1.返回顶部 1. 之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊 ...
- Java数组与C/C++数组的区别
C数组一维数组: 定义方式:datatype arrayname[length]数组是一个整体,在内存中是连续的: 初始化:1:可以只给部分赋值int a[5] = {1,2}; 剩下的自动赋值为02 ...
- Java数组以及内存分配
Java数组以及内存分配 什么数组(简) 数组初始化 动态初始化 静态初始化 内存分配问题(重) 数组操作的两个常见小问题 什么是数组: 定义格式: 数组类型 [] 数组名 ; 如:常用格式,其他方式 ...
- Java 数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java语言中提供的数组是用来存储固定大小的同类型元素. 你可以声明一个数组变量,如numbers[100 ...
- 第5章 Java数组
1.什么是数组 数组可以想象成一个巨大的盒子,这个盒子里面存放的是同一个数据类型的数据 例如:int[] scores = {78,68,94,93}; 2.如何使用Java中的数组 2.1申明数组 ...
- Java 数组基础
数组 数组(Array):相同类型数据的集合. 定义数组 方式1(推荐,更能表明数组类型) type[] 变量名 = new type[数组中元素的个数]; 比如: int[] a = new int ...
随机推荐
- Javascript中的基本数据类型,如何判断数据类型,作用域链的理解
第一部分:Javascript中的数据类型 javascript中 基本数据类型有 五种, 数字 number 字符串 string 布尔 boolean 未定义 undefined 空值 nul ...
- centos7.x 安装系统/配置网络/设置主机名
1.安装系统 系统的安装就不多说了,自行查找百度,如:https://www.cnblogs.com/wcwen1990/p/7630545.html 2.配置网络(局域网上网) 修改配置 ...
- 【记录】SpringBoot 2.X整合Log4j没有输出INFO、DEBUG等日志信息解决方案
由于批量更新的时候一直无法定位问题出处,就去服务器定位日志,奈何日志一直无法输出,为了能够更好的定位问题,痛定思痛后逐步排查最终解决问题.如有客官看到此处,请不要盲目对号入座,我的项目环境或许与你有区 ...
- 2019牛客暑期多校训练营(第十场)J - Wood Processing (斜率优化DP)
>传送门< 题意 $n$个宽度为$w_{i}$,高为$h_{i}$ 的 木块,要求分成$k$组,对于每组内的所有木块,高度都变为组内最低木块的高度,宽度保持不变,求变化的最小面积. 分析 ...
- tensorflow中的batch_norm以及tf.control_dependencies和tf.GraphKeys.UPDATE_OPS的探究
https://blog.csdn.net/huitailangyz/article/details/85015611#
- 自己搭建传统ocr识别项目学习
大批生成文集训练集: https://www.cnblogs.com/skyfsm/p/8436820.html 基于深度学习的文字识别(3755个汉字) http://www.cnblogs.com ...
- 开发人员需要掌握的日常Linux命令集
本文整理了开发人员日常用到的linux相关命令,供参考. 文件相关 cd # 进入某个目录,不接参数进入当前用户目录(等同于cd ~)如/home/devuser,可接绝对路径或相对路径(../..表 ...
- 三维动画形变算法(Gradient-Based Deformation)
将三角网格上的顶点坐标(x,y,z)看作3个独立的标量场,那么网格上每个三角片都存在3个独立的梯度场.该梯度场是网格的微分属性,相当于网格的特征,在形变过程中随控制点集的移动而变化.那么当用户拖拽网格 ...
- 关于前端jsonp跨域和一个简单的node服务搭建
先讲下概念 同源策略:是一种约定,浏览器最核心最基本的安全功能,(同域名,同协议,同端口)为同源 跨域: 跨(跳):范围 域 (源):域名,协议,端口 域名:ip的一种昵称(为了更好记住ip地址)如: ...
- C#开发BIMFACE系列5 服务端API之文件直传
BIMFACE使用了分布式对象存储来存储用户上传的模型/图纸文件.如使用普通的文件上传接口, 文件流会通过BIMFACE的服务器,再流向最终的分布式存储系统,整个上传过程会受BIMFACE服务器的带宽 ...