Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中。
Collection接口存储一组不唯一,无序的对象。
List接口存储一组不唯一,有序(插入顺序)的对象。
Set接口存储一组唯一,无序的对象。
Map接口存储一组键值对象,提供key到value的映射。
在Java中,Collection是所有集合类的根接口,它继承自Iterable接口,表示一组对象的集合。List、Set都继承自Collection接口,而Map则不是集合,它是一个映射表。
List是有序集合,可以包含重复的元素。它的实现类有ArrayList、LinkedList等。
Set是无序集合,不能包含重复的元素。它的实现类有HashSet、TreeSet等。
Map是一种映射表,它存储的是键值对(key-value pairs),其中键是唯一的,而值可以重复。它的实现类有HashMap、TreeMap等。
List接口的实现类:
ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高。
LinkedList采用链表存储方式,插入、删除元素时效比较高。
ArrayList常用方法
boolean add(Object o):在列表的末尾顺序添加元素,起始索引位置从0开始。
void add(int index, Object o): 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间。
int size(): 返回列表中的元素个数。
Object get(int index):返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换。
boolean contains(Object o): 判断列表中是否存在指定元素。
boolean remove(Object o): 从列表中删除元素。
Object remove(int index): 从列表中删除指定位置元素,起始索引位置从0开始。
clear(): 没有返回值,它的作用是清空集合中所有元素,使集合的size变为0。
boolean isEmpty(): 表示集合是否为空。如果集合中没有元素,则放回true,否则返回false。
Iterator iterator(): 返回一个Iterator接口类型的迭代器对象,用于遍历集合中的元素。
Object[] toArray(): 返回一个Object类型的数组,数组中包含了集合中的所有元素。如果需要返回指定类型的数组,可以使用重载的 toArray(T[] a) 方法。
需要注意的是,如果集合中的元素类型为基本数据类型,例如 int、double 等,则 toArray() 方法返回的数组类型为相应的包装类型,例如 Integer、Double 等。如果需要将其转换成基本数据类型的数组,则需要使用 Java 提供的 Array 类的相应方法进行转换。
LinkedList类是List接口的一个具体实现类,LinkedList类用于创建链表数据结构。插入或者删除元素时,它提供更好的性能。
LinkedList独有方法:
void addFirst(Object o):在列表的首部添加元素。
void addLast(Object o): 在列表的末尾添加元素。
Object getFirst(): 返回列表中的第一个元素。
Object getLast(): 返回列表中的最后一个元素。
Object removeFirst(): 删除并返回列表中的第一个元素。
Object removeLast(): 删除并返回列表中的最后一个元素。
Set接口:
Set接口存储一组唯一,无序的对象。HashSet是Set接口常用的实现类,Set中存放对象的引用。
Set接口如何判断加入对象是否已经存在:采用对象的equals()方法比较两个个对象是否相等。
Set 是一种无序的集合,因此不能像 List 一样通过索引来访问集合中的元素。如果需要输出 Set 中的元素,可以使用迭代器(Iterator)或者增强型 for 循环(foreach loop)。
使用迭代器可以遍历 Set 中的所有元素,并对每个元素进行操作。例如,可以使用如下代码输出 Set 中的所有元素:
Set<String> set = new HashSet<>();
// 添加元素到 Set 中
set.add("apple");
set.add("banana");
set.add("orange");
// 使用迭代器遍历 Set 中的所有元素并输出
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
另一种方法是使用增强型 for 循环,也称为 foreach 循环。它可以更简洁地遍历集合中的元素,但是不能用于修改集合中的元素。例如,可以使用如下代码输出 Set 中的所有元素:
Set<String> set = new HashSet<>();
// 添加元素到 Set 中
set.add("apple");
set.add("banana");
set.add("orange");
// 使用增强型 for 循环遍历 Set 中的所有元素并输出
for (String element : set) {
System.out.println(element);
}
无论是使用迭代器还是增强型 for 循环,输出的元素顺序都是无序的,因为 Set 是一种无序集合。