ArrayList详解
①定义
ArrayList是一个动态数组,也是我们常用的集合,它允许任何元素的插入,甚至包括null。每一个ArrayList都有一个初始化的容量(10),该容量代表了数组的大小,随着容器中容量的不断增加,容器的大小也会随着增加。在每次向容器中增加元素时,会进行容量检查,当快溢出时,会进行扩容操作。
②特性
- 允许插入的元素重复
- 插入的元素是有序的
- 动态扩容
- 非线程安全,异步
- 基于动态数组的数据结构
- 擅长随机访问(get set)
③常用方法
- add(Object e)
- add(int index ,Object e)
- addAll(Collection c)
- addAll(int index , Collection c)
- size()
- get(int index)
- set(int index,Object e)
- indexOf(Object c)
- lastIndexOf(Object c)
- isEmpty()
- remove(int index)
- remove(Object c)
- removeAll(Collection<?> c)
- contains(Object c)
- containsAll(Collection<?> c)
- clear()
- clone()
- iterator()
- retainAll(Collection<?> c)
- subList(int fromIndex,int toIndex)
- trimToSize() 回收多余容量
- toArray()
- toArray(T[] a)
③示例
add/addAll/set/size/get/indexOf/lastIndexOf/isEmpty
@Testpublic void addTest() {ArrayList list = new ArrayList();list.add(0);list.add(1);list.add(2);list.add(3); // 此时list : 0 1 2 3print("list", list);list.add(0, 4); // 在指定位置插入元素print("list", list); // 此时list ;4 0 1 2 3List newList = list.subList(2, 4); //截取list ,不包含最后一位print("newList", newList); // 此时 newList : 1 2list.addAll(2, newList); //新增list,新的list元素默认排在原来元素的后面 ,此时newList 不能再使用了print("list", list); // 此时,list : 4 0 1 2 1 2 3System.out.println("list size " + list.size());list.set(0, 1); //在指定位置替换元素print("list", list); // 此时 list : 1 0 1 2 1 2 3System.out.println(list.indexOf(1));System.out.println(list.lastIndexOf(1));System.out.println(list.isEmpty());}private void print(String flag, List list) {System.out.print(flag + ":");list.forEach(System.out::print);System.out.println();}
remove/removeAll
使用removeAll ,需要重写equals()方法
@Testpublic void removeTest() {ArrayList<String> list = new ArrayList<>();createDefaultList(list); // list : 0 1 2 3print("list", list);list.remove(2); // list : 0 1 3print("list", list);list.add(2, "2");print("list", list);list.remove("2");print("list", list);ArrayList<String> newList = new ArrayList<>();newList.add("0");newList.add("1");print("old list", list);print("new list", newList);list.removeAll(newList);print("list", list);}private void createDefaultList(ArrayList<String> list) {list.add("0");list.add("1");list.add("2");list.add("3");}
contains/containsAll 重写equals()方法
class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}@Overridepublic boolean equals(Object object) {Student student = (Student) object;return name.equals(student.getName()) && age == student.getAge();}}@Testpublic void containsTest() {ArrayList<Student> students = new ArrayList<>();Student ryan = new Student("Ryan", 25);Student kiven = new Student("Kiven", 25);students.add(ryan);students.add(kiven);Student ry = new Student("Ryan", 25);System.out.println(students.contains(ry));Student kv = new Student("Kiven", 25);ArrayList<Student> sts = new ArrayList<>();sts.add(ry);sts.add(kv);System.out.println(students.containsAll(sts));}
subList/clear
修改sublist会影响原来的list
public void subListTest() {//修改sublist 会影响原来的listArrayList<String> l1 = new ArrayList<>();l1.add("a");l1.add("b");l1.add("c");List<String> l2 = l1.subList(1, 2);l2.add("new");System.out.println(l1);System.out.println(l2);}
修改原来的list,sublist的所有操作都会报错
@Testpublic void subListTest() {//修改sublist 会影响原来的listArrayList<String> l1 = new ArrayList<>();l1.add("a");l1.add("b");l1.add("c");List<String> l2 = l1.subList(1, 2);l1.add("new");System.out.println(l1);System.out.println(l2);}
截取原来的list
@Testpublic void subListTest() {//修改sublist 会影响原来的listArrayList<String> l1 = new ArrayList<>();l1.add("a");l1.add("b");l1.add("c");l1.subList(1, 2).clear();System.out.println(l1);}
clone
@Testpublic void cloneTest() {ArrayList<Student> students = new ArrayList<>();Student student = new Student("Ryan", 25);Student student1 = new Student("Kiven", 24);students.add(student);students.add(student1);ArrayList<Student> students2 = (ArrayList<Student>) students.clone();students2.remove(1);System.out.println(students);System.out.println(students2);}
toArray
直接转换报错
public void arrayTest() {ArrayList<String> list = new ArrayList();list.add("1");list.add("2");String[] number = (String[]) list.toArray();System.out.println(number);}
@Testpublic void arrayTest() {ArrayList<String> list = new ArrayList();list.add("1");list.add("2");Object[] number = list.toArray();for (int i = 0; i < number.length; i++) {String e = (String) number[i];System.out.println(e);}System.out.println(number);}
toArray(T[] a)
@Testpublic void arrayTest() {ArrayList<String> list = new ArrayList();list.add("1");list.add("2");String[] number = list.toArray(new String[0]);for (int i = 0; i < number.length; i++) {System.out.println(number[i]);}}
iterator
@Testpublic void arrayTest() {ArrayList<String> list = new ArrayList();list.add("1");list.add("2");Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {String str = iterator.next();System.out.println(str);}}
retainAll -- 删除不在指定集合中的元素
@Testpublic void retainAllTest() {ArrayList<String> list = new ArrayList();list.add("1");list.add("2");list.add("3");ArrayList<String> list1 = new ArrayList<>();list1.add("3");list.retainAll(list1);System.out.println(list);}
ArrayList详解相关推荐
- Java集合篇:ArrayList详解
一.ArrayList概述: ArrayList是实现了List接口的动态数组,所谓动态数组就是他的大小是可变的.实现了所有可选列表操作,并允许包括Null在内的所有元素.除了实现 List 接口外, ...
- 容器List之ArrayList详解
目录 什么是ArrayList? 源码解析 类属性 构造方法: 类方法 @ 什么是ArrayList? ArrayList是Java集合常用的数据结构之一,继承自AbstractList,实现了Lis ...
- java list 之详解_java集合(二)List集合之ArrayList详解
前言: 有序列表,允许存放重复的元素: 实现类: ArrayList:数组实现,查询快,增删慢,轻量级:(线程不安全) LinkedList:双向链表实现,增删快,查询慢 (线程不安全) Vector ...
- JAVA.UTIL.ARRAYLIST 详解
[size=medium][color=red][b]java.util.ArrayList[/b][/color][/size] [size=medium] 数组和数组列表之间有着重大的区别.数组是 ...
- Java集合源码系列(1)---- ArrayList详解
目录 属性 构造函数 无参构造函数 含参构造(int initialCapacity) 含参构造(Collection c) add方法 add(E e) add(int index, E eleme ...
- ArrayList详解,看这篇就够了
资源分享 Java基础到Java实战全套学习视频教程,包括多个企业级实战项目:https://urlify.cn/YFzABz 密码: pi95 面试算法资料,这是总结的算法资料,学完基本可以应付80 ...
- ArrayList 详解
目录 简介 成员变量 构造函数 主要操作方法解析 总结 简介 ArrayList 是 java 集合框架中比较常用的数据结构了.继承自 AbstractList,实现了 List 接口.底层基于数组实 ...
- Java ArrayList详解
简介 ArrayList是List接口的典型实现,它是基于数组的,里面封装了一个动态的.允许再分配的Object[]数组. 学过数据结构的应该都知道线性表的顺序存储结构,ArrayList就是线性表的 ...
- JAVA笔记- JAVA集合类之ArrayList详解
1- 集合概述 A) 面向对象编程语言对事物的描述都是通过对象来体现的. 为了方便对多个对象进行操作,我们就必须对这多个对象进行存储,而要想对多个对象进行存储,就不能是一个基本的变量,而应该是一个容器 ...
最新文章
- AI开发难?请收下华为云AI大拿秘籍一份!
- debain apt oracle jdk,debian安装oracle jdk
- Pycharm安装PyQT5调用QTDesigner
- 通过@Value + @PropertySource来给组件赋值
- apache mesos_Apache Mesos + Marathon和Java EE
- 微擎即用WIFI源码V2.1.7
- 框架模式笔记:MVC 与MVP框架(完)
- 洛谷 1313 计算系数——水题
- [贪心|双指针] leetcode 11 盛最多水的容器
- python魔法方法_Python魔法方法
- 万能五笔输入法@相反
- 音频插件使用(wavesurfer.js)
- 起点中文网越来越火爆了,我利用Python直接把整站数据采集完毕
- jspstudy oracle,SQL不走索引的几种常见情况
- 软件项目管理系统-进度编辑
- 怎么解决ZBrush保存历史记录太多问题
- TensorFlow Serving Introduction
- Kubernetes格式化输出:custom-columns
- 企业仓库管理的5种方法
- 亚马逊刚开始做什么模式靠谱?