一、集合类概述
java.util 包中提供了一些集合类,这些集合类又被称为容器。集合类与数组的不同之处是,数组的长度是固定的,集合的长度是可变的;数组用来存放基本类型的数据,集合用来存放对象的引用,常用的集合有 List 集合、Set 集合和 Map 集合,其中 List 与 Set 继承了 Collection 接口,各接口还提供了不同的实现类。集合类的继承关系 :
二、Collection 接口
Collection 接口时层次结构中的根接口。构成 Collection 的单位称为元素。 Collection 接口通常不能直接使用,但该接口提供了添加元素、删除元素、管理数据的方法。由于 List 接口与 Set 接口都继承了 Collection 接口,因此这些方法对 List 集合与 Set 集合是通用的。
方法 | 功能描述 |
add( E e ) | 将指定的对象添加到该集合中 |
remove( Object o ) | 将指定的对象从该集合中移除 |
isEmpty() | 返回 boolean 值,用于判断当前集合是否为空 |
iterator() | 返回在此 Collection 的元素上进行迭代的迭代器。用于遍集合中的对象 |
size() | 返回 int 型值,获取该集合中元素的个数 |
通常遍历集合,都是通过迭代器(Iterator)来实现的。 Collection 接口中的 iterator() 方法可返回在此 Collection 进行迭代的迭代器。
eg 2.1 在项目中创建类 Muster ,在主方法中实例化集合对象,并想集合中添加元素,最后将集合中的对象以 String 形式输出。
package com.CollectionDemo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Muster {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();// 实例化集合对象
list.add("a");// 向集合添加元素 a
list.add("b");// 向集合添加元素 b
list.add("c");// 向集合添加元素 c
Iterator<String> iterator = list.iterator();// 创建迭代器
while (iterator.hasNext()) {
String string = (String) iterator.next();// 判断是否还有下一个元素
System.out.println(string);// 获取集合中元素
}
}
}
运行结果为 :
a
b
c
ps :Iterator 的 next() 方法返回的是 Object 。
三、 List 集合
List 集合包括 List 接口以及 List 接口的所有实现类。 List 集合中的元素允许重复,各元素的顺序就是对象插入的顺序。类似 Java 数组,用户可通过使用索引(元素在集合中的位置)来访问集合中的元素。
3.1 List 接口
List 接口继承了 Collection 接口,因此包含 Collection 中的所有方法,此外, List 接口还定义了一下两个方法 :
( 1 ) :get(int index) :获取指定索引位置的元素 。
( 2 ) :set(int index , Object obj) :将集合中指定索引位置的对象修改为指定的对象 。
3.2 List 接口的实现类
List 接口的常用实现类有 ArrayList 与 LinkedList 。
( 1 ) :ArrayList 类实现了可变的数组,允许保存所有元素,包括 null ,并可以根据索引位置对集合进行快速的随机访问;缺点是向指定的索引位置插入对象或删除对象的速度较慢 。
( 2 ) :LinkedList 类采用链表结构保存对象。这种结构的优点是便于向集合中插入和删除对象,需要向集合中插入,删除对象时,使用 LinkedList 类实现 List 集合的效率较高;但对象随机访问集合中的独享,使用 LinkedList 类实现 List 集合的效率较低。
使用 List 集合时通常声明为 List 类型,可通常不同的实现类来实例化集合。
eg 3.2-1 分别通过 ArrayList 、 LinkedList 类实例化 List 集合。
List<E> list = new ArrayList<>();
List<E> list2 = new LinkedList<>();
E 可以是合法的 Java 数据类型。例如,如果集合中的元素为字符串类型,那么 E 可以修改为 String 。
eg 3.2-1 在项目中创建 Gather ,在主方法中创建集合对象,通过 Math 类的 random() 方法随机获取集合中的某个元素,然后移除数组中索引位置是 “ 2 ” 的元素,最后遍历数组。
package com.CollectionDemo;
import java.util.ArrayList;
import java.util.List;
public class Gather {
public static void main(String[] args) {
List<String> list = new ArrayList<>();// 创建集合对象
list.add("a");
list.add("b");
list.add("c");
int i = (int) (Math.random() * (list.size() - 1));// 获得 0 ~ 2 之间的随机数
System.out.println("随机获取数组中的元素:" + list.get(i));
list.remove(2);// 将指定索引位置的元素从集合中移除
System.out.println("将索引是'2'的严肃从数组移除后,数组中的元素是:");
for (int j = 0; j < list.size(); j++) {// 循环遍历集合
System.out.println(list.get(j));
}
}
}
运行结果为 :
随机获取数组中的元素:b
将索引是'2'的严肃从数组移除后,数组中的元素是:
a
b
ps :与数组想用,集合的索引也是从 0 开始 。