本文通过实例讲解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 }

Java入门系列:实例讲解ArrayList用法的更多相关文章

  1. Java入门系列之集合ArrayList源码分析(七)

    前言 上一节我们通过排队类实现了类似ArrayList基本功能,当然还有很多欠缺考虑,只是为了我们学习集合而准备来着,本节我们来看看ArrayList源码中对于常用操作方法是如何进行的,请往下看. A ...

  2. [转]Scrapy简单入门及实例讲解

    Scrapy简单入门及实例讲解 中文文档:   http://scrapy-chs.readthedocs.io/zh_CN/0.24/ Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用 ...

  3. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    概要 上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具体实现类进行讲解:首先,讲解List,而List中ArrayList又最为常用.因此,本章我们讲解Arra ...

  4. 【转】Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    原文网址:http://www.cnblogs.com/skywang12345/p/3308556.html 上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具 ...

  5. Java入门系列-19-泛型集合

    集合 如何存储每天的新闻信息?每天的新闻总数是不固定的,太少浪费空间,太多空间不足. 如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,可以使用Java集合框架. Java 集合框架提 ...

  6. TCP入门与实例讲解

    内容简介 TCP是TCP/IP协议栈的核心组成之一,对开发者来说,学习.掌握TCP非常重要. 本文主要内容包括:什么是TCP,为什么要学习TCP,TCP协议格式,通过实例讲解TCP的生命周期(建立连接 ...

  7. Java 集合系列03之 ArrayList详细介绍

    ArrayList做为List接口中最常用的实现类,必须掌握. 一.ArrayList简介 与Java中的数组相比ArrayList的容量可以动态增加.它继承与AbstractList,实现了List ...

  8. 【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由E ...

  9. Java入门系列-26-JDBC

    认识 JDBC JDBC (Java DataBase Connectivity) 是 Java 数据库连接技术的简称,用于连接常用数据库. Sun 公司提供了 JDBC API ,供程序员调用接口和 ...

随机推荐

  1. 谈谈AsmJit

    0x01  基本介绍 AsmJit是一个完整的JIT(just In Time, 运行时刻)的针对C++语言的汇编器,可以生成兼容x86和x64架构的原生代码,不仅支持整个x86/x64的指令集(包括 ...

  2. 【sh文件权限】无法启动tomcat -bash: ./startup.sh: Permission denied

    今天在Linux上启动Tomcat,结果弹出:-bash: ./startup.sh: Permission denied 的提示. 这是因为用户没有权限,而导致无法执行, 用命令chmod 修改一下 ...

  3. console 调试技巧

    前言 如果统计一番前端最常用的方法,那么 console.log 一定位列其中.无论你写的是原生 JS 亦或者是 JQuery.Vue等等,调试之时,都离不开 console.log 方法.但是,co ...

  4. XSS事件(一)

    前言 ​ 最近做的一个项目因为安全审计需要,需要做安全改造.其中自然就包括XSS和CSRF漏洞安全整改.关于这两个网络安全漏洞的详细说明,可以参照我本篇博客最后的参考链接.当然,我这里并不是想写一篇安 ...

  5. 【angular5项目积累总结】结合adal4实现http拦截器(token)

    import { Injectable } from '@angular/core'; import { HttpEvent, HttpInterceptor, HttpHandler, HttpRe ...

  6. OpenDigg iOS开源项目月报201704

    由OpenDigg 出品的iOS开源项目月报第一期来啦.我们的iOS开源月报集合了OpenDigg一个月来新收录的优质的iOS开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. Transi ...

  7. Java面试——你必须知道的122题

    1.Java面向对象中所有类的最终基类是什么? 参考答案 object,所有类都默认最终继承object,object是所有类的基类 2.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语 ...

  8. WPF备忘录(2)WPF获取和设置鼠标位置与progressbar的使用方法

    一.WPF 中获取和设置鼠标位置 方法一:WPF方法 Point p = Mouse.GetPosition(e.Source as FrameworkElement); Point p = (e.S ...

  9. MFC进程的创建销毁、线程的创建与交互

    进程的创建 STARTUPINFO si; //**成员DWORD dwFlags;表示结构体当中哪些成员有效.**STARTF_USESHOWWINDOW|STARTF_USEPOSITION PR ...

  10. 【JVM】1、java虚拟机参数-X 与 -XX的区别

    Options that begin with -X are non-standard (not guaranteed to be supported on all VM implementation ...