6.1 集合概述
Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。
在这里主要讲一些我们平常很常用的一些接口和一些实现类。
Java 集合可分为 Collection 和 Map 两种体系:
Collection接口:单列数据,定义了存取一组对象的方法的集合
List:元素有序、可重复的集合(动态数组)
Set:元素无序、不可重复的集合
Map接口:双列数据,保存具有映射关系“key-value对”的集合
6.2 Collection接口
Collection是所有单列集合的父接口,它定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合。
表6-1 Collection接口的常用方法
方法声明 | 功能描述 |
boolean add (Object o) | 向集合中添加一个元素 |
boolean addAll(Collection c) | 将指定Collection中的所有元素添加到该集合中 |
void clear() | 删除该集合中的所有元素 |
boolean remove(Object o) | 删除该集合中指定的元素 |
boolean removeAll(Collection c) | 删除指定集合中的所有元素 |
boolean isEmpty() | 判断该集合是否包含某个元素 |
boolean contains(Object o) | 判断该集合中是否包含某个元素 |
boolean containsAll(Collection c) | 判断该集合中是否包含指定集合中的所有元素 |
lterator iterator() | 返回在该集合的元素上进行迭代的迭代器(lterator),用于遍历该集合的所有元素 |
int size() | 获取该集合元素个数 |
6.3 List接口
6.3.1 List接口简介
List接口继承自Collection接口,是单列集合的一个重要分支。List集合允许出现重复的元素,所有的元素是以一种线性方式进行储存的,在程序中可以通过索引访问List集合中的指定元素。
List作为Collection集合的子接口,不但继承了Collection接口中的全部方法。
表6-2 List集合的常用方法
方法声明 | 功能描述 |
void add(int index,Object element) | 将元素element插入在List集合的index处 |
boolean addAll(int index,Collection c) | 将集合c所包含的所有元素插入到List集合的index处 |
Object get(int index) | 返回集合索引index处的元素 |
Object remove(int index) | 删除集合索引index处的元素 |
Object set(int index,Object element) | 将集合索引index处元素替换成element对象,并将替换后的元素返回 |
int indexOf(Object o) | 返回对象o在List集合中出现的位置索引 |
int lastlndexOf(Object o) | 返回对象o在List集合中最后一次出现的位置索引 |
List subList(int fromindex,int tolndex) | 返回从索引fromlndex(包括)到tolndex(不包括)处的所有元素组成的子集合 |
6.3.2 ArrayList集合
ArrayList是List接口的一个实现类, 它是程序中最常见的一种集合。 在ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList 会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。
ArrayList集合中大部分方法都是从父类Collection和List继承过来的,其中add ( )方法和get( )方法分别用于实现元素的存人和取出。
案例学习 6-1
import java.util.*;
public class Example01 {
public static void main(String[] args) {
ArrayList list = new ArrayList(); // 创建ArrayList集合
list.add("张三"); // 向集合中添加元素
list.add("李四");
list.add("王五");
list.add("赵六");
// 获取集合中元素的个数
System.out.println("集合的长度:" + list.size());
// 取出并打印指定位置的元素
System.out.println("第2个元素是:" + list.get(1));
}
}
运行结果→
集合的长度:4
第二个元素是:李四
由于ArrayList 集合的底层使用一个数组来保存元素 ,在增加或删除指定位置的元素时,会创建新的数效率比较低,因此不适合做大量的增加或删除操作。因为这种数组的结构允许程序通过索引的方式来访问元素,所以使用ArrayList集合查找元素很便捷。
6.3.3 LinkedList集合
(a)新增元素 (b)删除元素
通过两张图片描述了LinkedList集合新增元素和删除元素的过程,其中,左边图为增加元素,图中的元素1和元素2集合彼此位前后关系,在它们之间新增一个元素时,只需要让元素1记住它后面的元素是新元素,让元素2记住它前面的元素为新元素就可以了。右边为删除元素,要想删除元素1和元素2之间的元素3,只需要让元素1与元素2变成前后关系就可以。由此可见Linked LIst集合具有删除元素效率高的特点。
表6-3 LinkedList集合增加和删除元素的特有方法
方法声明 | 功能描述 |
void add(int index,E element) | 在此集合中指定的位置插入指定的元素 |
void addFirst(Object o) | 将指定元素插入此集合的开头 |
void addLast(Object o) | 将指定元素添加到此集合的结尾 |
Object getFirst() | 返回此集合的最后一个元素 |
Object getLast() | 返回此集合的最后一个元素 |
Object removeFirst() | 删除并返回此集合的第一个元素 |
Object removeLast() | 删除并返回此集合的最后一个元素 |
案例学习 6-2
import java.util.*;
public class Example02 {
public static void main(String[] args) {
LinkedList link = new LinkedList(); // 创建LinkedList集合
link.add("张三");
link.add("李四");
link.add("王五");
link.add("赵六");
System.out.println(link.toString()); // 取出并打印该集合中的元素
link.add(3, "Student"); // 向该集合中指定位置插入元素
link.addFirst("First"); // 向该集合第一个位置插入元素
System.out.println(link);
System.out.println(link.getFirst()); // 取出该集合中第一个元素
link.remove(3); // 移除该集合中指定位置的元素
link.removeFirst(); // 移除该集合中第一个元素
System.out.println(link);
}
}
运行结果→
[张三,李四,王五,赵六]
[First,张三,李四,王五,Student,赵六]
First
[张三,李四,Student,赵六]