①定义

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详解相关推荐

  1. Java集合篇:ArrayList详解

    一.ArrayList概述: ArrayList是实现了List接口的动态数组,所谓动态数组就是他的大小是可变的.实现了所有可选列表操作,并允许包括Null在内的所有元素.除了实现 List 接口外, ...

  2. 容器List之ArrayList详解

    目录 什么是ArrayList? 源码解析 类属性 构造方法: 类方法 @ 什么是ArrayList? ArrayList是Java集合常用的数据结构之一,继承自AbstractList,实现了Lis ...

  3. java list 之详解_java集合(二)List集合之ArrayList详解

    前言: 有序列表,允许存放重复的元素: 实现类: ArrayList:数组实现,查询快,增删慢,轻量级:(线程不安全) LinkedList:双向链表实现,增删快,查询慢 (线程不安全) Vector ...

  4. JAVA.UTIL.ARRAYLIST 详解

    [size=medium][color=red][b]java.util.ArrayList[/b][/color][/size] [size=medium] 数组和数组列表之间有着重大的区别.数组是 ...

  5. Java集合源码系列(1)---- ArrayList详解

    目录 属性 构造函数 无参构造函数 含参构造(int initialCapacity) 含参构造(Collection c) add方法 add(E e) add(int index, E eleme ...

  6. ArrayList详解,看这篇就够了

    资源分享 Java基础到Java实战全套学习视频教程,包括多个企业级实战项目:https://urlify.cn/YFzABz 密码: pi95 面试算法资料,这是总结的算法资料,学完基本可以应付80 ...

  7. ArrayList 详解

    目录 简介 成员变量 构造函数 主要操作方法解析 总结 简介 ArrayList 是 java 集合框架中比较常用的数据结构了.继承自 AbstractList,实现了 List 接口.底层基于数组实 ...

  8. Java ArrayList详解

    简介 ArrayList是List接口的典型实现,它是基于数组的,里面封装了一个动态的.允许再分配的Object[]数组. 学过数据结构的应该都知道线性表的顺序存储结构,ArrayList就是线性表的 ...

  9. JAVA笔记- JAVA集合类之ArrayList详解

    1- 集合概述 A) 面向对象编程语言对事物的描述都是通过对象来体现的. 为了方便对多个对象进行操作,我们就必须对这多个对象进行存储,而要想对多个对象进行存储,就不能是一个基本的变量,而应该是一个容器 ...

最新文章

  1. AI开发难?请收下华为云AI大拿秘籍一份!
  2. debain apt oracle jdk,debian安装oracle jdk
  3. Pycharm安装PyQT5调用QTDesigner
  4. 通过@Value + @PropertySource来给组件赋值
  5. apache mesos_Apache Mesos + Marathon和Java EE
  6. 微擎即用WIFI源码V2.1.7
  7. 框架模式笔记:MVC 与MVP框架(完)
  8. 洛谷 1313 计算系数——水题
  9. [贪心|双指针] leetcode 11 盛最多水的容器
  10. python魔法方法_Python魔法方法
  11. 万能五笔输入法@相反
  12. 音频插件使用(wavesurfer.js)
  13. 起点中文网越来越火爆了,我利用Python直接把整站数据采集完毕
  14. jspstudy oracle,SQL不走索引的几种常见情况
  15. 软件项目管理系统-进度编辑
  16. 怎么解决ZBrush保存历史记录太多问题
  17. TensorFlow Serving Introduction
  18. Kubernetes格式化输出:custom-columns
  19. 企业仓库管理的5种方法
  20. 亚马逊刚开始做什么模式靠谱?

热门文章

  1. 16个python常用魔法函数
  2. 文件流导出excel表格
  3. 机器学习-贝叶斯公式
  4. linux进程控制(上)
  5. 上海和北京环境各有什么特色?
  6. 三星计算机打不开,三星电脑开机后进不了系统 技术教你解决方法
  7. 详解JSON.parse 和 JSON.stringify
  8. 智能颈部按摩仪设计——3.功能模式实现
  9. win10 启动失败,显示0xc000000e
  10. 计算机作业微波炉工作的原理,微波炉工作原理是什么 微波炉使用方法【详解】...