java(七)数组
来源:互联网 发布:java 深度遍历算法 编辑:程序博客网 时间:2024/06/02 02:08
数组
1、定义:数组是一个简单的复合数据类型,它是一系列有序相同类型数据的集合,可以通过数组名加上一个不会越界下标值来唯一确定数组中的元素。(一个比较特殊的对象,是object的直接子类)。
public class test { int[] a0 = new int[10]; test t=new test(); System.out.println("一维数组:" + a0.getClass().getName()); int[][] a1 = new int[10][10]; System.out.println("二维数组:" + a1.getClass().getName()); int[][][] a2 = new int[10][10][10]; System.out.println("三维数组:" + a2.getClass()); System.out.println(t.getClass());}
一维数组:[I二维数组:[[I
三维数组:class [[[I
class day01to05.test
[代表维度,普通类是路径加类名作为自己的标识,而数组则已[+数组元素路径+类名作为标识,在数组中有一个特征的属性length,数组直接继承自object,object里没有length变量,那么数组如何实现length的
public class M { public static void main(String[] args) { int a[] = new int[2]; int i = a.length; }}
M的class文件,打开字节码如下0 iconst_2 //将int型常量2压入操作数栈 1 newarray 10 (int) //将2弹出操作数栈作为长度,创建类型为int维度为1的数组,并将数组的引用压入操作数栈 3 astore_1 //将数组的引用从操作数栈中弹出,保存在索引为1的局部变量(即a)中 4 aload_1 //将索引为1的局部变量(即a)压入操作数栈 5 arraylength //从操作数栈弹出数组引用(即a),并获取其长度(JVM负责实现如何获取),并将长度压入操作数栈 6 istore_2 //将数组长度从操作数栈弹出,保存在索引为2的局部变量(即i)中 7 return //m方法返回
这里没有length这个成员变量,arraylength ,这条指令是用来获取数组的长度的,JVM对数组的长度做了特殊的处理,它是通过arraylength这条指令来实现的。2、数组的应用:
数组要先声明在使用,细节为:声明:数组形式,分配空间:连续存储空间。赋值:数据初始化,基本类型初始值为0,引用类型初始值为null。处理:数据的操作,数组名加有效下标的处理。
数组的性能:数组是一种高效的存储和随机访问对象引用序列的方式。数组在某些地方的使用是不如List和Set集合,数组有自己的优势,集合的底层也是通过数组来实现的。比如在求和的使用中使用数组和list的对比。数组使用get函数获取数据,list使用get()函数。list.get(i)这个动作里进行了拆箱操作,Integer对象对int型数据进行对象封装,这里拆箱和数组获取相比慢了很多。
3、数组的操作:
数组的长度:数组生明后长度不会改变,但是如果想让其改变,模拟arraylist的扩容方法,将原始数组拷贝至新数组中,新数组的长度时原数组的1.5倍。
数组的复制:使用List.toArray()方法转换成数组然后再通过Arrays.copyOf拷贝,再转换成集合,若数组元素为对象,则数组里面数据是对象引用,典型浅复制。
数组转换为list,Arrays的工具里有asList()方法,将其转化成列表
public static void main(String[] args) { int[] a = new int[]{1,2,3}; List list = Arrays.asList(a); System.out.println(list.size()); }
结果是1而不是3,在asList()的源码中T..a参数是泛型变长参数,这里没有报错是因为,数组是对象处理的可以是泛型public static <T> List<T> asList(T... a) { return new ArrayList<T>(a); }
程序是把一个int型的数组作为了T的类型,所以在转换之后List中就只会存在一个类型为int数组的元素了。所以我们这样的程序System.out.println(datas.equals(list.get(0)));输出结果肯定是true。当然如果将int改为Integer,则长度就会变成3了。- java(七)数组
- java中的数组(七)
- java学习日志(七)-- 数组Array
- 七、java的数组
- 数组笔记(七)
- Java基础必备(七)——数组(二)
- java 从零开始,学习笔记之基础入门<数组>(七)
- Java语言基础(七)—— 数组
- JAVA 学习模块七: 二维数组
- java基础学习之对象数组 七
- 数组(七)--折半查找
- 数组(七)
- 七、数组
- java技巧(七)
- java(敲 七)
- Java虚拟机(七)
- Java虚拟机(七)
- Java基础知识(七)
- 系统编程
- 【matlab】GUI 编译程序,打包成独立软件
- 士兵队列操作模拟
- 方法参数 java核心技术程序清单:4-4
- HDU 1596:find the safest road
- java(七)数组
- Oracle11g安装,配置监听和数据库实例
- 两个数值交换
- django数据库migrate失败的解决方法
- Android音量控制调节
- Android — jimu Mirror
- Sigma Function LightOJ
- jQuery选择器(二)
- android 恢复出厂设置流程