java基础进阶篇(二)_Arraylist ------【java源码栈】
前言
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源码栈】的更多相关文章
- Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...
- 动态方式破解apk进阶篇(IDA调试so源码)
动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/qq_21051503/article/details/74907449 下面就说关于在IDA中And ...
- java基础进阶篇(四)_HashMap------【java源码栈】
目录 一.前言 二.特点和常见问题 二.接口定义 三.初始化构造函数 四.HashMap内部结构 五.HashMap的存储分析 六.HashMap的读取分析 七.常用方法 八.HashMap 的jav ...
- Java基础学习笔记二十三 Java核心语法之反射
类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...
- java基础,集合,HashMap,源码解析
最怕,你以为你懂咯,其实你还不懂: 见贤思齐,看看那些我们习以为常的集合,通过相关定义.源码,思考分析,加深对其的理解,提高编码能力,能做一个略懂的程序员: 做几个我们常用的集合类.开篇HashMap ...
- Java集合框架之二:LinkedList源码解析
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! LinkedList底层是通过双向循环链表来实现的,其结构如下图所示: 链表的组成元素我们称之为节点,节点由三部分组成:前一个节点的引用地 ...
- Android动态方式破解apk进阶篇(IDA调试so源码)
一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...
- Android进阶:二、从源码角度看透 HandlerThread 和 IntentService 本质
上篇文章我们讲日志的存储策略的时候用到了HandlerThread,它适合处理"多而小的任务"的耗时任务的时候,避免产生太多线程影响性能,那这个HandlerThread的原理到底 ...
- java基础,集合,Arraylist,源码解析(基础)
ArrayList 是什么,定义? 这是动态的数组,它提供了动态的增加和减少元素,实现了List接口(List实现Collection,所以也实现Collection接口)灵活的设置数组的大小等好处 ...
随机推荐
- 使用node 做静态文件服务器
# 1. 使用server-static 包 使用node可以非常快速的方法把指定目录共享出去 前提条件:安装了node,附带有npm 要托管的文件目录为 /root/www # 先创建一个目录用来存 ...
- Office 365 邮件流
进入Exchange管理中心->点击左侧的“邮件流”->进入邮件流配置页面. 一.规则 规则也称传输规则,对通过组织传递的邮件,根据设定条件进行匹配,并对其进行操作.传输规则与众多电子邮件 ...
- oracle安装和使用
1.0 安装 2.0 初始化 1.使用 sqlplus 连接oracle数据库 1)在cmd中输入sqlplus /nolog 2)使用管理员账户登录orcl数据库实例 conn sys/gzsx ...
- JavaMail读取收件箱退信邮件/分析邮件附件获取Message_Id
需求描述:公司最近有个项目邮件通知功能,但是客户上传的邮件地址并不一定存在,以及其他的各种问题.所有希望发送通知后有个回执,及时发现地址存在问题的邮箱. 需求分析:经过分析JavaMail可以读取收件 ...
- 混合欧拉回路poj 1637 Sightseeing tour
把该图的无向边随便定向,计算每个点的入度和出度.如果有某个点出入度之差为奇数,那么肯定不存在欧拉回路.因为欧拉回路要求每点入度 = 出度,也就是总度数为偶数,存在奇数度点必不能有欧拉回路: 好了,现在 ...
- BGP2
1) 按照拓扑搭建网络,在所有AS间使用直连接口建立EBGP邻居关系: 2) 在公司总部AS400中,R4与R5,R5与R7,R7与R6,R6与R4间使用环回接口建立IBGP邻居关系,IGP协议使用O ...
- Python与用户相交互
今日所得 Python中注释的重要性 Python与用户相交互: 1.输入 2.输出 3.格式化输出 Python的基本数据类型:int,float,str,list,dict,bool 运算符 1. ...
- Xen入门系列二【使用 virt-install 安装虚拟机】
系统环境:Centos 6.5 + Xen4Centos安装方式 相关链接:Xen4Centos方式安装Xen请查看:http://www.cnblogs.com/hackboy/p/3662432. ...
- RabbitMQ传输原理、五种模式
本文代码基于SpringBoot,文末有代码连接 .首先是一些在Spring Boot的一些配置和概念,然后跟随代码看下五种模式 MQ两种消息传输方式,点对点(代码中的简单传递模式),发布/订阅(代码 ...
- Pytorch中的variable, tensor与numpy相互转化的方法
1.将numpy矩阵转换为Tensor张量 sub_ts = torch.from_numpy(sub_img) #sub_img为numpy类型 2.将Tensor张量转化为numpy矩阵 sub_ ...