创建一个ArrayList对象,传入整型参数

@Test
public void arrayListConstructor(){
ArrayList<Object> objects = new ArrayList<>(5);
System.out.println(objects.size());
     // 0
}

结果调用size方法,返回结果却是0。

难道是真的没生效吗?

ArrayList对象的size()方法源码:

/**
* Returns the number of elements in this list.
*
* @return the number of elements in this list
*/
public int size() {
return size;
}

直接返回的是size属性,继续看size属性的定义:

/**
* The size of the ArrayList (the number of elements it contains).
*
* @serial
*/
private int size;

是一个整型的变量。

再看ArrayList构造方法的源码:

/**
* Constructs an empty list with the specified initial capacity.
*
* @param initialCapacity the initial capacity of the list
* @throws IllegalArgumentException if the specified initial capacity
* is negative
*/
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}

这个构造方法并没有对"size"属性做任何操作,虽然不代表其他地方(代理、监听等)对size进行了处理,但是ArrayList目前没有这些东西;

因为"size"属性在构造方法里未被赋值操作,所以当调用"size()"方法时直接返回的"size"属性,实际上是int变量默认值0。

只是指定上面构造方法指定的int型参数是容纳能力capacity,并非size的大小,list初始化还是没有一个元素,即size=0

那么如何初始化ArrayList容量呢

@Test
public void appointCapacity(){
List<Object> src = new ArrayList<>();
src.add(123);
src.add("Luo");
src.add(23.5);
// 下面一行只是指定lists的容纳能力capacity,并非size的大小,list初始化还是没有一个元素,即size=0
// List<Object> dest = new ArrayList<>(src.size())); List<Object> dest = new ArrayList<>(Arrays.asList(new Object[src.size()]));
System.out.println(dest.size());
// 3 // 注意,源src是第二个参数,而拷贝到链表dest是第一个参数
Collections.copy(dest, src); dest.forEach(System.out::println);
}

上面是对一个数组进行拷贝,指定初始化数组的"size":List<Object> dest = new ArrayList<>(Arrays.asList(new Object[${size}]));

Java ArrayList调用构造方法传入"容量size"不生效,如何初始化List容量size的更多相关文章

  1. Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件

    本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import ...

  2. 【Java基础】构造方法调用构造方法

    从一个程序开始: class dog { private String name; private String color; private int age; dog(String name) // ...

  3. Java方法、构造方法的重载;创建对象;调用方法

    方法的重载 概念:多个同名但是不同参数的方法称为方法的重载 作用:编译器会根据调用时传递的实际参数自动判断具体调用的是哪个重载方法 特点:方法名相同:同一作用域:参数不同:数量不同 类型不同 顺序不同 ...

  4. java this关键字调用构造方法

    一 this调用构造方法 构造方法之间的调用,可以通过this关键字来完成. 格式: this(参数列表); 构造方法的调用举例: class Person { // Person的成员属性 priv ...

  5. Java ArrayList源码分析(含扩容机制等重点问题分析)

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  6. Java ArrayList、Vector和LinkedList等的差别与用法(转)

    Java ArrayList.Vector和LinkedList等的差别与用法(转) ArrayList 和Vector是采取数组体式格式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,都 ...

  7. Java中HashMap 初始化时容量(参数)如何设置合适?

    问题引入 注:本文代码源自java 9. 阿里的插件对于初始化HashMap时,调用无参构造方法,提示如下: 那么问题来了,如果已知需要向 map 中 put n次,那么需要设定初始容量为多少? 单纯 ...

  8. Java ArrayList 源代码分析

    Java ArrayList 之前曾经参考 数据结构与算法这本书写过ArrayList的demo,本来以为实现起来都差不多,今天抽空看了下jdk中的ArrayList的实现,差距还是很大啊 首先看一下 ...

  9. Java ArrayList 详解

    只记录目前为止关注的.JDK1.8 一.基础属性 1.1 内部参数 //空存储实例.直接new ArrayList()便是以该空数组作为实例 private static final Object[] ...

随机推荐

  1. 自由线程FreeThreadDOMDocument

    Posted on 2006年09月4日by 不及格的程序员-八神 星期二 天气:晴   昨天燕子 自己去五爱了 给我买了一堆袜子 给妈买了一双鞋 给自己买了一件 红色的内衣服 挺好看的 在市场买了一 ...

  2. 【leetcode】415. Add Strings

    problem 415. Add Strings solution: class Solution { public: string addStrings(string num1, string nu ...

  3. Navicat For MySQL--外键建立与cannot add foreign key constraint分析

    hrm_job.png 参考资料: https://blog.csdn.net/ytm15732625529/article/details/53729155 https://www.cnblogs. ...

  4. 创建ApplicationContext与BeanFactory时的区别-Spring源码学习之容器的基本实现

    传送门 可以加载XML两种方法 使用 BeanFactory 加载 XML BeanFactory bf = new XmlBeanFactory(new ClassPathResource(&quo ...

  5. SQLI DUMB SERIES-9&&10

    第五关.第八关以及第九关.第十关都是使用盲注,除了第五关说的双注入外,也可使用时间注入法 (1)无论输入啥,都回显相同 (2) ?id=1' and sleep(3) --+ 发现有明显延迟,说明可以 ...

  6. np金融量化分析

    在所有的np中都是已返回值的形式进行修改的,否则不会修改  只是显示内容 形状是三维数据  全0数组 reshape也可以将二维的变成一维的 下标和切片 一维的切片 二维切片 . 列表切片 给一个数组 ...

  7. Go并发编程实战 (郝林 著)

    第1章 初识Go语言 1.1 语言特性 1.2 安装和设置 1.3 工程构造 1.3.1 工作区 1.3.2 GOPATH 1.3.3 源码文件 package main import ( " ...

  8. PHP的 preg_match_all

    语法:int preg_match_all ( string pattern, string subject, array &matches [, int flags] ) 这个函数的返回值是 ...

  9. prettier-eslint 与 prettier-eslint-cli 区别

    prettier-eslint 与 prettier-eslint-cli 区别: prettier-eslint 只能处理字符串 prettier-eslint-cli 能处理一个或多个文件 默认情 ...

  10. Windows下好用的git客户端--GitExtentions

    用git: https://git-scm.com/downloads GitExtentions: https://sourceforge.net/projects/gitextensions/ B ...