• Java入门系列:实例讲解ArrayList用法


    本文通过实例讲解Java中如何使用ArrayList类。

    Java.util.ArrayList类是一个动态数组类型,也就是说,ArrayList对象既有数组的特征,也有链表的特征。可以随时从链表中添加或删除一个元素。ArrayList实现了List接口。

    大家知道,数组是静态的,数组被初始化之后,数组长度就不能再改变了。ArrayList是可以动态改变大小的。那么,什么时候使用Array(数组),什么时候使用ArrayList?答案是:当我们不知道到底有多少个数据元素的时候,就可使用ArrayList;如果知道数据集合有多少个元素,就用数组。

    1.ArrayList构造函数

    ArrayList类支持3个构造方法。

    • Arraylist()

    这个构造方法构造了一个空的链表。

    • ArrayList(Collection<? extends E> c)

    这个构造方法构造了一个包含指定元素集合的链表,注意,这里的字符E是一个标记,用来表示集合中元素的类型。至于具体是什么类型,需要你在使用这个构造方法的时候来指定。

    • ArrayList(int initialCapacity)

    这是第三个构造方法,构造了一个指定大小但内容为空的链表。initialCapacity参数就是初始容量大小。

    举例来说,如果你要创建一个空的数组链表,用来存放String类型的对象,那么你可以像下面这样做:

    ArrayList<String> list = new ArrayList<String>();

    如果你需要创建一个指定初始容量的数组链表,你可以像下面这样做:

    ArrayList<Integer> list = new ArrayList<Integer>(7);

    注意:ArrayList类只支持对象类型,不支持 基础数据类型。就是说ArrayList对象只能存放对象,不能存放基础数据类型的数据。

    2.ArrayList常用方法

    下面是总结了一些比较常用的ArrayList类成员方法:

    • 增加元素到链表中
      • boolean add(Element e)
        增加指定元素到链表尾部.
      • void add(int index, Element e)
        增加指定元素到链表指定位置.
    • 从链表中删除元素
      • void clear()
        从链表中删除所有元素.
      • E remove(int index)
        删除链表中指定位置的元素.
      • protected void removeRange(int start, int end)
        删除链表中从某一个位置开始到某一个位置结束的元素。
    • 获取链表中的元素
      • E get(int index)
        获取链表中指定位置处的元素.
      • Object[] toArray()
        获取一个数组,数组中所有元素是链表中的元素.(即将链表转换为一个数组)
    • 修改某个元素
      • E set(int index, E element)
        将链表中指定位置上的元素替换成新元素。
    • 搜索元素
      • boolean contains(Object o)
        如果链表包含指定元素,返回true.
      • int indexOf(Object o)
        返回元素在链表中第一次出现的位置,如果返回-1,表示链表中没有这个元素。
      • int lastIndexOf(Object o)
        返回元素在链表中最后一次出现的位置,如果返回-1,表示链表中没有这个元素。
    • 检查链表是否为空
      • boolean isEmpty()
        返回true表示链表中没有任何元素.
    • 获取链表大小
      • int size()
        返回链表长度(链表包含元素的个数).

    以上是ArrayList类中使用比较多的成员方法。每个方法的更详细的说明或其它没有提及到的方法,读者可以参考java官方api

    3.ArrayList使用实例

     1 import java.util.*;
     2 
     3 public class ArrayListExamples {
     4 
     5     public static void main(String args[]) {
     6         // 创建一个空的数组链表对象list,list用来存放String类型的数据
     7         ArrayList<String> list = new ArrayList<String>();
     8 
     9         // 增加元素到list对象中
    10         list.add("Item1");
    11         list.add("Item2");
    12         list.add(2, "Item3"); // 此条语句将会把“Item3”字符串增加到list的第3个位置。
    14         list.add("Item4");
    15 
    16         // 显示数组链表中的内容
    17         System.out.println("The arraylist contains the following elements: "
    18                 + list);
    19 
    20         // 检查元素的位置
    21         int pos = list.indexOf("Item2");
    22         System.out.println("The index of Item2 is: " + pos);
    23 
    24         // 检查数组链表是否为空
    25         boolean check = list.isEmpty();
    26         System.out.println("Checking if the arraylist is empty: " + check);
    27 
    28         // 获取链表的大小
    29         int size = list.size();
    30         System.out.println("The size of the list is: " + size);
    31 
    32         // 检查数组链表中是否包含某元素
    33         boolean element = list.contains("Item5");
    34         System.out
    35                 .println("Checking if the arraylist contains the object Item5: "
    36                         + element);
    37 
    38         // 获取指定位置上的元素
    39         String item = list.get(0);
    40         System.out.println("The item is the index 0 is: " + item);
    41 
    42         // 遍历arraylist中的元素
    43 
    44         // 第1种方法: 循环使用元素的索引和链表的大小
    45         System.out
    46                 .println("Retrieving items with loop using index and size list");
    47         for (int i = 0; i < list.size(); i++) {
    48             System.out.println("Index: " + i + " - Item: " + list.get(i));
    49         }
    50 
    51         // 第2种方法:使用foreach循环
    52         System.out.println("Retrieving items using foreach loop");
    53         for (String str : list) {
    54             System.out.println("Item is: " + str);
    55         }
    56 
    57         // 第三种方法:使用迭代器
    58         // hasNext(): 返回true表示链表链表中还有元素
    59         // next(): 返回下一个元素
    60         System.out.println("Retrieving items using iterator");
    61         for (Iterator<String> it = list.iterator(); it.hasNext();) {
    62             System.out.println("Item is: " + it.next());
    63         }
    64 
    65         // 替换元素
    66         list.set(1, "NewItem");
    67         System.out.println("The arraylist after the replacement is: " + list);
    68 
    69         // 移除元素
    70         // 移除第0个位置上的元素
    71         list.remove(0);
    72 
    73         // 移除第一次找到的 "Item3"元素
    74         list.remove("Item3");
    75 
    76         System.out.println("The final contents of the arraylist are: " + list);
    77 
    78         // 转换 ArrayList 为 Array
    79         String[] simpleArray = list.toArray(new String[list.size()]);
    80         System.out.println("The array created after the conversion of our arraylist is: "
    81                         + Arrays.toString(simpleArray));
    82     }
    83 }
  • 相关阅读:
    文本特征选择的关键算法总结
    偏置-方差分解(Bias-Variance Decomposition)
    排列木桩
    七夕鹊桥分析
    第五十七课、模型视图设计模式(下)------------------狄泰软件学院
    第五十六课、模型视图设计模式(中)------------------狄泰软件学院
    第五十五课、模型视图设计模式(上)------------------狄泰软件学院
    第八十五课、多线程与界面组件的通信(下)------------------狄泰软件学院
    第八十四课、多线程与界面组件的通信(上)------------------狄泰软件学院
    第八十三课、另一种创建线程的方式------------------狄泰软件学院
  • 原文地址:https://www.cnblogs.com/bayes/p/5474728.html
Copyright © 2020-2023  润新知