zoukankan      html  css  js  c++  java
  • 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,内存紧张的时候会用到.

    在这里插入图片描述 在这里插入图片描述
  • 相关阅读:
    【转】CRC校验
    【转】MapReduce程序的工作过程
    【转】hadoop机架感知
    【转】git常用命令
    Code Examples for scala actor link
    【转】ThreadLocal原理及其实际应用
    【转】scala解惑: 偏函数与部分应用函数
    (九)Maven坐标详解
    (八)Eclipse创建Maven项目运行mvn命令
    (七)Maven使用的最佳实践
  • 原文地址:https://www.cnblogs.com/tingbogiu/p/12396922.html
Copyright © 2011-2022 走看看