在java中,数组是一种效率最高的存储和随机访问对象引用序列的方式,数组就是一个简单的线性序列,这使得元素访问非常迅速,但是带来的代价是数组对象的大小被固定。并且在其生命周期中不可改变,当然可通过使用ArrayList,它可以通过创建一个新的实例,然后把旧实例复制中所有 的引用移到新实例中。,从而实现更多空间的自动分配,,但是这种弹性需要开销的,因此,ArrayList的效率比数组的效率低的多。
在泛型没有出现之前,其他的容器类在处理对象时,都将他们视作没有任何具体的类型,也就是说,它们都将这些对象当做java的根类Object 处理了,数组之所以优于泛型之前的容器,就是因为你可以创建一个数组去持有某种具体的类型,这意味着我们可以通过编译器检测,来防止插入错误类型和抽取不当的类型,
无论使用哪种类型的数组,数组标示付其实只是一个引用,指向其在堆中创建的一个真实对象,这个 数组对象用于保存指向其他对象的引用。
对象数组和基本类型数组在使用上几乎是相同的,唯一的区别就是对象数组保存的是引用,基本类型数组直接保存基本类型的值。
int[] a = new int[5];
a.length;
在这里,length是数组的大小,而不是实际保存的元素个数,新生产一个数组对象时,其中所有的引用被null,即可知道数组的某个位置是否存有对象。
数组和泛型
通常,数组和泛型不能很好的结合,不能实例化具有参数化类型的数组。
Peel<Banana>[] peels = new Peel<Banana>(); //错误
擦除会移除参数类型信息,而数组必须知道他们所持有的确切类型,以强制保证类型安全,虽然编译器不让我们实例化泛型数组,但是,它允许我们创建对这种数组的引用。如:
List<String>[] list;
但这又有什么用呢!
java标准类库Arrays有一个作用十分有限的fill()方法,只能用同一个值填充各个位置。例如:
public class FillArrays{
public static void main(String[] args){
boolean[] a1 = new boolean[6];
int[] a2 = new int[6];
String[] a3 = new String[6];
Arrays.fill(a1,true);
Arrays.fill(a2,16);
Arrays.fill(a3,"hello");
Arrays.fill(a3,3,5,"world");
System.out.println(a1);
System.out.println(a2);
System.out.println(a3);
}
}
输出:
a1=[true,true,true,true,true,true]
a2=[16,16,16,16,16,16]
a3=[hello,hello,hello,world,hello,world]
使用Arrays.fill()可以填充整个数组,或者只填充数组的某个区域,但是由于只能用单一的数值来调用Aarrays.fill()方法,因此所产生的结果并非特别有用。
一个基本的工具类
public class ConvertTo {
public static boolean[] primitive(Boolean[] in) {
boolean[] result = new boolean[in.length];
for(int i = 0; i < in.length; i++)
result[i] = in[i]; // Autounboxing
return result;
}
public static char[] primitive(Character[] in) {
char[] result = new char[in.length];
for(int i = 0; i < in.length; i++)
result[i] = in[i];
return result;
}
public static byte[] primitive(Byte[] in) {
byte[] result = new byte[in.length];
for(int i = 0; i < in.length; i++)
result[i] = in[i];
return result;
}
public static short[] primitive(Short[] in) {
short[] result = new short[in.length];
for(int i = 0; i < in.length; i++)
result[i] = in[i];
return result;
}
public static int[] primitive(Integer[] in) {
int[] result = new int[in.length];
for(int i = 0; i < in.length; i++)
result[i] = in[i];
return result;
}
public static long[] primitive(Long[] in) {
long[] result = new long[in.length];
for(int i = 0; i < in.length; i++)
result[i] = in[i];
return result;
}
public static float[] primitive(Float[] in) {
float[] result = new float[in.length];
for(int i = 0; i < in.length; i++)
result[i] = in[i];
return result;
}
public static double[] primitive(Double[] in) {
double[] result = new double[in.length];
for(int i = 0; i < in.length; i++)
result[i] = in[i];
return result;
}
}
分享到:
相关推荐
树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c...
然后,我们使用array_merge函数将这两个数组组合成一个新的数组,并使用foreach循环遍历数组,将数组1中的元素设置为红色,数组2中的元素设置为蓝色,并输出结果。 需要注意的是,我们使用了in_array函数来判断一个...
实验 4 数组 1 本实验报告将对数组的基本概念、字符数组与字符串的使用方法、与数组相关的算法等进行探索,并通过编程实现数组元素的最大值和最小值的查找、字符串中满足条件的第一个字符的查找、矩阵中最大元素...
题目 "最短无序连续子数组1" 是一道关于数组处理的问题,主要考察的是寻找数组中需要升序排序的最短连续子数组,以便整个数组变得有序。这是一道典型的算法题,通常出现在编程竞赛如 LeetCode 等平台。 在解决这个...
《C语言学习笔记》数组1主要讲解了一维数组和二维数组的概念、声明、初始化以及存储原理,以下是详细的知识点解析: 一维数组是C语言中基础的数据结构之一,它是一系列相同类型的数据元素的集合。在内存中,一维...
IDEA工具&数组1 IDEA是一款功能强大的集成开发环境(Integrated Development Environment),它提供了很多实用的功能来帮助开发者快速高效地编写、调试和维护代码。在本节中,我们将学习如何使用IDEA工具来开发Java...
php数组1,这里是php技术中的数组部分的第一个png图像
一维数组的使用-数组1
数组1.sdf
数组1.sln
作业 数组1-1.cpp
数组1 4.exe
listview数据源为多维数组1
java-c语法8---数组的数组1 java视频 马克java社区 马克towin
数组的定义格式为:类型说明符数组名[整常量表达式1][整常量表达式2],其中类型说明符表示数组元素的数据类型,数组名是数组的名称,整常量表达式1和整常量表达式2分别表示数组的行数和列数。 二维数组元素的引用:...
1.数组 1.创建的新数组是空数组,没有值,如输出,则显示undefined 2.虽然创建数组时,指定了长度,但实际上数组都是变长的,也就是说即使指定了长度为8
用 for 循环产生 4 行 100 列二维数组,数组成员如下: 1,2,3………100 100,99,98………..1 6,7,8………….105 105,104,103………6 从这个数组中提取出 2 行 50 列的二维数组,成员如下: 50,49,48……...
1. 编写一个程序打印数出有10个元素的浮点数组a1中最大值和最小值。 2.将有10个元素的数组a1 拷贝至含有15个元素的数组b1的一段位置。 3.将一个已存入数组中的值45,89,7,6,0,按0,6,7,89,45的次序打印...
【数组概述】 数组是计算机编程中一种基础且重要的数据结构,它允许我们存储一组具有相同类型的数据。在C语言中,数组的声明形式通常为`[存储类型说明符] [类型修饰符] 类型说明符 数组名[常量表达式]={初值表}`。...
1. 编写一个程序打印数出有10个元素的浮点数组a1中最大值和最小值。 2.将有10个元素的数组a1 拷贝至含有15个元素的数组b1的一段位置。 3.将一个已存入数组中的值45,89,7,6,0,按0,6,7,89,45的次序打印...