前言

ArrayList 在开发中用到的频率很高,其中原生态提供的方法有一些很好用的重载版本,其中有的坑该跳得跳啊.

一.ArrayList的6种初始化方法1.构造方法 参数为空2.构造方法 参数为List3.构造方法 参数为int4.使用Arrays.asList(Obj);5.使用匿名内部类6.使用Collections.ncopies(通过复制参数)二.常规操作: 增删改查1.添加元素|集合,add有四个重载方法1) boolean add(E e)2) void add(int index, E element)3) boolean addAll(Collection c)4) addAll(int index, Collection c)2.删除元素1) String remove(int index);2) boolean remove(Object o);3) boolean removeAll(Collection c);4) boolean retainAll(Collection c)5) void clear();三.其他方法1.boolean contains(Object o);2.int indexOf(Object o);3.int lastIndexOf(Object o);4.boolean isEmpty();5.void trimToSize()

一.ArrayList的6种初始化方法

1.构造方法 参数为空

常见的方式.

1ArrayList<String> list1 = new ArrayList<String>();

2.构造方法 参数为List

1ArrayList<String> list2 = new ArrayList<String>(Arrays.asList("a","b","c"));

3.构造方法 参数为int

指定ArrayList 的容量.但size()长度初始化仍然是0.

1ArrayList<String> list3 = new ArrayList<String>(5);
2System.out.println(list3.size());// 0
3list3.add("a");
4list3.add("b");
5list3.add("c");
6System.out.println(list3.size());// 3

4.使用Arrays.asList(Obj);

1ArrayList<String> list = (ArrayList<String>) Arrays.asList("o1", "o2");

5.使用匿名内部类

1ArrayList<String> obj = new ArrayList<String>() {
2    {
3        add("1");
4        add("2");
5    }
6};

6.使用Collections.ncopies(通过复制参数)

1int count = 3;
2String element = "hello";
3//将element复制count次
4ArrayList<String> ncoList = new ArrayList<String>(Collections.nCopies(count, element));
5for(String item: ncoList) {
6    System.out.print(item + " ");//输出: hello hello hello 
7}

二.常规操作: 增删改查

1.添加元素|集合,add有四个重载方法

1) boolean add(E e)

在末尾添加加元素,返回值是boolean.

1ArrayList<String> addList1 = new ArrayList<String>();
2addList1.add("a");
3addList1.add("c");
4for(String item: addList1) {
5    System.out.print(item);//输出: ac
6}
2) void add(int index, E element)

在指定索引处添加元素.

1addList1.add(1, "b");
2for(String item: addList1) {
3    System.out.print(item);//输出: abc
4}
3) boolean addAll(Collection c)

在末尾添加一个集合.

1addList1.addAll(Arrays.asList(new String("def")));
2for(String item: addList1) {
3    System.out.print(item);//输出: abcdef
4}
4) addAll(int index, Collection c)

在指定索引处添加一个集合list.

1addList1.addAll(0, Arrays.asList(new String("123")));
2for(String item: addList1) {
3    System.out.print(item);//输出: 123abcdef
4}

2.删除元素

1) String remove(int index);

删除指定索引处元素,并返回删除的元素.

 1 ArrayList<String> delList2 = new ArrayList<String>();
2 delList2.add("a");
3 delList2.add("b");
4 delList2.add("c");
5 delList2.add("d");
6 delList2.add("e");
7 delList2.add("f");
8 delList2.add("a");
9 String delElm = delList2.remove(2);
10System.out.println("删除元素: " + delElm);//输出: 删除元素: c
11for(String item: delList2) {
12    System.out.print(item);//输出: abdefa
13}
2) boolean remove(Object o);

删除数组中第一个相同的元素,成功删除返回true否则返回false;
值得注意的是,若泛型是Integer类型的数组,必须传入int的包装类Integer类型,否则传入的int会作为索引处理.

1boolean removeReturn = delList2.remove("a");
2System.out.println("返回值: " + removeReturn);//输出: 返回值: true
3for(String item: delList2) {
4    System.out.print(item);//输出: bdefa
5}

值得注意的是: List A我是通过数组经过Arrays.asList()转化成List,但是它是继承AbstractList的子类,
而AbstractList是不支持removeAll()和remove()操作的。
如果要执行remove()和removeAll()操作,可以转化成Set()或者ArrayList、LinkedList才可以.

3) boolean removeAll(Collection c);

从列表中移除指定参数集合 c 中包含的其所有元素(删除交集元素,一个不留!);返回true|false.

 1 ArrayList<String> delList3 = new ArrayList<String>();
2 delList3.add("a");
3 delList3.add("b");
4 delList3.add("c");
5 delList3.add("a");
6 delList3.add("b");
7 delList3.add("c");
8 //比如删除数组中所有的a元素
9 boolean retVal2 = delList3.removeAll(Arrays.asList("a"));
10System.out.println(retVal2);//输出: true
11for(String item: delList3) {
12    System.out.print(item);//输出: bcbc
13}
4) boolean retainAll(Collection c)

和removeAll相反,retainAll只在原有数组中保留参数集合c中相等的元素;返回true|false.

 1 ArrayList<String> delList4 = new ArrayList<String>();
2 delList4.add("a");
3 delList4.add("b");
4 delList4.add("c");
5 delList4.add("a");
6 delList4.add("b");
7 delList4.add("c");
8 //比如,除了传入的a,b外,原数组a,b以外的元素(c)都删除.
9 boolean retVal04 = delList4.retainAll(Arrays.asList("a","b"));
10System.out.println(retVal04);//输出结果
11
12System.out.println();
13for(String item: delList4) {
14    System.out.print(item);//输出: abab
15}
5) void clear();

清除当前列表中的所有元素.

1ArrayList<String> delList5 = new ArrayList<String>();
2delList5.add("a");
3delList5.add("b");
4delList5.add("c");
5System.out.println("clean前: " + delList5.size());//clean前: 3
6delList5.clear();
7System.out.println("clean后: " + delList5.size());//clean后: 0

三.其他方法

1.boolean contains(Object o);

如果此数组列表中包含指定的元素o,则返回 true,否则返回false.

1System.out.println(list.contains("a"));//输出: true
2System.out.println(list.contains("d"));//输出: false

2.int indexOf(Object o);

返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。

1System.out.println(list.indexOf("a"));//输出: 0
2System.out.println(list.indexOf("d"));//输出: -1

3.int lastIndexOf(Object o);

返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。

1System.out.println(list.lastIndexOf("a"));//输出: 0
2System.out.println(list.lastIndexOf("d"));//输出: -1

4.boolean isEmpty();

如果此列表中没有元素,则返回 true.
源码仅通过判断数组列表size==0, 如果数组列表本身是null,则会抛出异常, 不建议使用此方法.
建议通过CollectionUtils.isEmpty(C) 来判断是集合否为空更合适,当数组内没有元素且长度为0或者数组本身是null,返回true.

5.void trimToSize()

将此 ArrayList 实例的容量调整为列表的当前大小。
比如当size() = 1000的时候,ArrayList已经初始化1200空间的情况
trimToSize 的作用只是去掉预留元素位置,就是删除多余的200,改为只申请1000,内存紧张的时候会用到.

在这里插入图片描述

java基础进阶篇(二)_Arraylist ------【java源码栈】的更多相关文章

  1. Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

    Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...

  2. 动态方式破解apk进阶篇(IDA调试so源码)

    动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/qq_21051503/article/details/74907449 下面就说关于在IDA中And ...

  3. java基础进阶篇(四)_HashMap------【java源码栈】

    目录 一.前言 二.特点和常见问题 二.接口定义 三.初始化构造函数 四.HashMap内部结构 五.HashMap的存储分析 六.HashMap的读取分析 七.常用方法 八.HashMap 的jav ...

  4. Java基础学习笔记二十三 Java核心语法之反射

    类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...

  5. java基础,集合,HashMap,源码解析

    最怕,你以为你懂咯,其实你还不懂: 见贤思齐,看看那些我们习以为常的集合,通过相关定义.源码,思考分析,加深对其的理解,提高编码能力,能做一个略懂的程序员: 做几个我们常用的集合类.开篇HashMap ...

  6. Java集合框架之二:LinkedList源码解析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! LinkedList底层是通过双向循环链表来实现的,其结构如下图所示: 链表的组成元素我们称之为节点,节点由三部分组成:前一个节点的引用地 ...

  7. Android动态方式破解apk进阶篇(IDA调试so源码)

    一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...

  8. Android进阶:二、从源码角度看透 HandlerThread 和 IntentService 本质

    上篇文章我们讲日志的存储策略的时候用到了HandlerThread,它适合处理"多而小的任务"的耗时任务的时候,避免产生太多线程影响性能,那这个HandlerThread的原理到底 ...

  9. java基础,集合,Arraylist,源码解析(基础)

    ArrayList 是什么,定义? 这是动态的数组,它提供了动态的增加和减少元素,实现了List接口(List实现Collection,所以也实现Collection接口)灵活的设置数组的大小等好处 ...

随机推荐

  1. Opencv笔记(三)——视频的获取及保存

    一.利用摄像头获取视频 我们经常需要使用摄像头捕获实时图像.OpenCV 为这中应用提供了一个非常简单的接口.让我们使用摄像头来捕获一段视频,并把它转换成灰度视频显示出来.了获取视频,你应该创建一个 ...

  2. 《VSTO开发入门教程》配套资源下载

    <VSTO开发入门教程> 刘永富 著 清华大学出版社 封面截图 购书网址 京东网 淘宝网 配套资源到如下页面寻找: https://www.cnblogs.com/ryueifu-VBA/ ...

  3. 2020 CCPC Wannafly Winter Camp Day1-F-乘法

    题目传送门 sol:二分答案$K$,算大于$K$的乘积有多少个.关键在于怎么算这个个数,官方题解上给出的复杂度是$O(nlogn)$,那么计算个数的复杂度是$O(n)$的.感觉写着有点困难,自己写了一 ...

  4. JSP中request对象常用方法汇总

    setAttribute(String name,Object):设置名字为name的request的参数值 getAttribute(String name):返回由name指定的属性值 getAt ...

  5. aws基础架构学习笔记

    文章大纲 Aws 的优势 架构完善的框架(WAF) Aws 学习笔记 Aws架构中心 Aws 的优势 4.速度优势 5.全球优势 数分钟内实现全球部署 Aws全球基础设施 Aws 数据中心 来自多家O ...

  6. Android 7.0终极开发者预览版全攻略!

    近日,Google的工程部副总裁Dave Burke在官方博客上正式发布开发者预览版5,此预览版是android 7.0 “牛轧糖”正式发布前最后一个预览版,同时也是在性能.功能上等多方面的表现上最接 ...

  7. django框架基础-视图系统-长期维护

    ##################   什么是视图?     ####################### 视图: 1,一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受W ...

  8. Factual question|具体特殊

    Factual question:答案一定出于文章,不是总结 流程:找定位词做连连看,找对定位词,先看此句,然后看选项回文对照.如果找不到找上下两句话. 为了缩小范围,定位词是具体特殊,不要抽象词,可 ...

  9. Spring-IOC(DI)的三种注入方式

    spring为方便不同的需求,为我们提供了3中不同的注入方式分别是set.get方法注入,构造注入还有p命名空间注入,老规矩,直接上代码 首先创建实体类Student public class Stu ...

  10. Qt OpenCV::Mat与Qt::QImage相互转换

    Mat转QImage QImage mat2qim(Mat & mat) { cvtColor(mat, mat, COLOR_BGR2RGB); QImage qim((const unsi ...