泛型数组列表与反射

如果声明一个没有指定空间长度的泛型数组,如ArrayList<Integer> in = new
ArrayList<>(),这时,系统会自动给in分配10个容量空间,即[null,null,null,null,null,null,null,null,null,null],如果这时为in赋值,如:

for(int i=1;i<=5;i++){      in.add(i);}

这时,in的内容实际上为[1,2,3,4,5,null,null,null,null,null],即有五个为null的值,但是用in.size()方法得到5,不包括后面的null,在实现反射的toString()方法时,可能会打印出后面的null值,如:

java.util.ArrayList[elementData=class java.lang.Object[]{java.lang.Integer[value=1][][],java.lang.Integer[value=4][][],java.lang.Integer[value=9][][],java.lang.Integer[value=16][][],java.lang.Integer[value=25][][],null,null,null,null,null},size=5][modCount=5][][]
即便一开始指定ArrayList的大小,如ArrayList<Integer> in = new ArrayList<>(4),当动态增加数组元素到一定量值时,ArrayList本身的大小会曾动态增长,增长值为4->7->11->17...,并不是逐个增加容量大小,而是遵循((旧容量 * 3) / 2) + 1的规则.
另外,数组在java中是一个对象,这意味着它可以这样被引用:
priavate int[] a = new int[10];
public static Object XXX(Object a){
    ...
}
时间: 2024-08-14 19:42:04

泛型数组列表与反射的相关文章

泛型数组列表 ArrayList

为什么使用泛型数组列表而不使用普通数组? 1.普通数组经常会发生容量太大以致浪费的情况 2.普通数组无法动态更改数组 基本概念: 1.采用[类型参数]的[类]---->[泛型类] 2.[泛型类型]就是类型参数的类型 对泛型数组列表的操作: 1.添加元素,add方法,默认在尾部添加,变化参数可以插入到中间.删除元素 2.初始化容量(ensurecapacity或是把初始容量传递给构造器) 3.回收多余的存储空间(trimToSize) 4.访问数组元素 get(i) 5.转化为数组 toArray

java-基础入门-泛型数组列表-解决运行时动态更改数组的问题

泛型数组列表,主要是为了解决运行时动态更改数组的问题 平常我们会定义一个部门里面的人员的一个数组, 但是在实际业务当中,这个数组的大小往往是不确定的, 如果定义过大,那么会浪费空间,定义过小,又不够用, 因为为了解决运行时动态更改数组的问题,我们提出下面的解决方案. package com.ray.object; import java.util.ArrayList; /** * 泛型数组列表 ,解决运行时动态更改数组的问题 * * @author ray * @since 2015-05-04

关于JAVA核心技术(卷一)读后的思考(泛型数组列表的讨论)

在C++中编译时是要确定数组大小的,而Java有所不同,它允许在运行时确定数组的大小.但是如果仅通过数组是无法改变运行时无法动态更改数组的问题.一旦确定了数组大小,就很难改变他了数组的大小了,要解决这个问题,就需要引入ArrayList的类.它使用起来有点像数组,但在添加或删除元素时,具有自动调节数组容量的功能,而不需要为此编写任何代码. ArrayList是一个采用类型参数的泛型类.为了指定数组列表保存的元素对象类型,需要用一对尖括号将类名括起来加在后面.下面是声明和构造一个保存Employe

泛型数组列表

java.util.ArrayList<T> ArrayList<>() 构造一个空数组列表 ArrayList<T>(int initialCapacity) 用指定容量构造一个空数组列表 boolean add(T obj) 在数组列表的尾端添加一个元素 int size() 返回存储在数组列表中的当前元素数量.(这个值小于或等于数组列表的容量) void ensureCapacity(int capacity) 确保数组列表在不重新分配存储空间的情况下就能够保存给

基于泛型的数组列表

在<数组和数组列表>那篇随笔里我们定义了一个int类型的数组列表,但是这样实际上是有问题的,在日后的开发中我们使用的数组列表实际上并不一定是int类型的,甚至于,还不一定会是基本数据类型的.那这个时候,按照原来的方法,我们在开发中每要定义一个数组列表,我们就要重写一遍,这样做实际上是非常不友好的.那么有什么方法来解决这一问题呢,这样我们便引出了泛型这个概念 泛型 什么是泛型?泛型简单来理解实际上就是一个类类型,它是表示一个类的类型,而不具体表示某一个对象.由于在此重点是数组列表,关于泛型的其他

Java 泛型 泛型数组

直接创建泛型数组不能通过编译,而转型对象数组通过编译但是不能在JVM运行 public class ArrayOfGeneric{ static Generic<Integer>[] gia; @SupperssWarnings("unchecked") public static void main(String[] args){ gia = (Generic<Integer>[])new Generic[100]; // 通过类型转换匿名对象 //! gia

java创建泛型数组

java中创建泛型数组并不是不可能,创建泛型数组通过反射,给构造函数传递两个参数,一个类型标记,一个数组大小.' 简单Demo如下: import java.lang.reflect.Array; /** * 创建泛型数组 * @author hetiantian */ public class GenericArrayWithTypeToken<T> { private T[] array; public GenericArrayWithTypeToken(Class<T> ty

我的java学习笔记(10)关于泛型数据列表

1.ArrayList是一个采用类型参数的泛型类. 2.为了指定数组列表保存的元素对象类型,需要用一对尖括号将类名括起来加在后面. ArryList<a> s = new ArrayList<a>();//右边尖括号里的参数可以省略 3.使用add方法将元素添加到数组列表中. s.add(a()); 4.数组列表管理着对象引用的一个内部数组.如果调用add且内部数组已经满了,数组列表就将自动的创建一个更大的数组,并将所有的对象从较小的数组中拷贝到较大的数组中. 5.还可以把出事容量

[转]:Delphi XE中泛型数组的使用范例

Delphi XE中泛型数组的使用范例,下面的范例简单的使用了泛型字符串数组,如用 TArray 代替 array of Word, 还可以使用 TArray 类提供的算法(就是少了点). uses Generics.Collections, Generics.Defaults; {测试 TArray 的 Sort 方法} procedure TForm1.Button1Click(Sender: TObject); var arr: TArray<string>; //同 array of