我是靠谱客的博主 强健板凳,这篇文章主要介绍Java 集合框架 ArrayList 使用方法,现在分享给大家,希望可以做个参考。

ArrayList简介

  • ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。

  • ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。

  • ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。稍后,我们会比较List的“快速随机访问”和“通过Iterator迭代器访问”的效率。

  • ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。

  • ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。

和Vector不同, ArrayList中的操作不是线程安全的! 所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。

初始化添加ArrayList

复制代码
1
2
3
4
5
ArrayList<String> al = new ArrayList<String>(); al.add("a"); al.add("b"); al.add("c");

增加、删除、改值、取位置

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ArrayList<String> al = new ArrayList<String>(); // 添加元素 al.add("a"); al.add("b"); al.add("c"); // 删除元素 al.remove("b"); // 删除值为b的元素 al.remove(1); // 删除第0位元素 // 修改元素 al.set(1,"d"); // 修改索引1的值为d // 查询元素 System.out.println(al.get(2)); // 获取索引2位置的值 System.out.println(al.contains("a")); // 判断元素是否存在,返回 true false System.out.println(al.isEmpty()); //判断集合是否为空 System.out.println(bl.subList(2,4)); // 取列表里 [2, 4) 索引中的内容

取交集、去除交集

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ArrayList<String> al = new ArrayList<String>(); al.add("a"); al.add("b"); al.add("c"); ArrayList<String> bl = new ArrayList<String>(); bl.add("a"); bl.add("b"); bl.add("f"); al.retainAll(bl); // 取交集,al中只会保留与bl相同的元素 System.out.println(al); // [a, b] System.out.println(bl); // [a, b, f] // al = [a, b, c] bl = [a, b, f] al.removeAll(bl); // 去除交集,al中保留与bl不相同的元素 System.out.println(al); // [c] System.out.println(bl); // [a, b, f]

通过迭代器输出列表元素

复制代码
1
2
3
4
5
6
7
8
9
10
// 方法一 Iterator it = bl.iterator(); // 生成迭代器对象 while(it.hasNext()) // 判断还有没有下个元素 System.out.println(it.next()); // 取出下个元素 // 方法二 for (String s : bl) { // 迭代器的for 输出元素 System.out.println(s); }

Iterator 的缺陷:

Iterator 在迭代时,不可以通过集合对象的方法操作集合的元素
例如在迭代时增加元素会报错:

复制代码
1
2
3
4
5
for(String s: al){ if(s.equals("b")) al.add("g"); }

因为会发生并发修改异常。ConcurrentModificationException
在迭代器时,只能用迭代器操作元素,可是Iterator方法是有限的。
只有三种操作 ( hasNext、Next、remove )

如果想要其他操作,如添加、修改等,就可以用 ListIterator,ListIterator具备迭代器增删改查功能。

List集合特有的迭代器:LIstIterator (是Iterator的子接口)

ListIterator使用方法:

void add(E o)
将指定的元素插入列表(可选操作)。

boolean hasNext()
以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。

boolean hasPrevious()
如果以反向遍历列表,列表迭代器有多个元素,则返回 true。

E next()
返回列表中的下一个元素。

int nextIndex()
返回对 next 的后续调用所返回元素的索引。

E previous()
返回列表中的前一个元素。

int previousIndex()
返回对 previous 的后续调用所返回元素的索引。

void remove()
从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。

void set(E o)
用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。

注意,remove() 和 set(Object) 方法不是 根据光标位置定义的;它们是根据对调用 next() 或 previous() 所返回的最后一个元素的操作定义的。

示例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ArrayList<String> al = new ArrayList<String>(); // 添加元素 al.add("a"); al.add("b"); al.add("c"); ListIterator list = al.listIterator(); while(list.hasNext()){ Object obj = list.next(); if(obj.equals("b")){ list.add("d"); } } System.out.println(al); // [a, b, d, c]

ArrayList去除对象的重复内容

有一个Person对象,具有年龄和姓名属性。
年龄和姓名一致时才认为是同一个人。
条件: 要求去除重复的同一个人。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.*; class Person{ private String name; private int age; public Person(String name, int age){ this.name = name; this.age = age; } public Object getName(){ return this.name; } public Object getAge(){ return this.age; } public boolean equals(Object obj){ Person temp = (Person)obj; /* * 判断年龄和姓名相等才返回真 * */ return(this.age == temp.age && this.name.equals(temp.name)); } } public class test{ public static void main(String[] args) { ArrayList al = new ArrayList<Person>(); // 添加元素 al.add(new Person("li01",12)); al.add(new Person("li01",12)); al.add(new Person("li01",15)); al.add(new Person("li02",18)); al.add(new Person("li03",21)); al.add(new Person("li03",12)); al.add(new Person("li04",36)); al = singleElement(al); for(Object s :al){ System.out.println(((Person)s).getName() + ".." + ((Person)s).getAge()); } } static ArrayList singleElement(ArrayList al){ Iterator it = al.iterator(); ArrayList newAl = new ArrayList(); while (it.hasNext()){ Object obj = it.next(); /* * contains 内部其实用了indexOf, indexOf 内部再用了 object.equals * 所以覆盖object.equals方法可以实现去重 * */ if(!newAl.contains(obj)) newAl.add(obj); } return newAl; } }

最后

以上就是强健板凳最近收集整理的关于Java 集合框架 ArrayList 使用方法的全部内容,更多相关Java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(152)

评论列表共有 0 条评论

立即
投稿
返回
顶部