02-Collection、泛型
1. Collection接口
在Java中,Collection
是一个用于存储和操作一组对象的接口,它是Java集合框架中最基本的接口之一。Collection
接口提供了许多常用的方法,用于对集合中的对象进行添加、删除、查找、遍历等操作,是Java中处理集合数据的常用工具。
概述
Collection
接口是Java集合框架中定义的一个顶层接口,它继承了Iterable
接口,表示它的实现类可以被迭代遍历。Collection
接口定义了一些常用的方法,包括添加、删除、查找、遍历等操作,用于对集合中的对象进行处理。Collection
接口的实现类包括了许多常用的集合类,例如ArrayList
、LinkedList
、HashSet
、TreeSet
等。
常用方法
Collection
接口提供了丰富的方法,以下是一些常用的方法:
add(E e)
:向集合中添加一个元素。remove(Object o)
:从集合中删除指定的元素。contains(Object o)
:判断集合中是否包含指定的元素。size()
:返回集合中元素的个数。isEmpty()
:判断集合是否为空。clear()
:清空集合中的所有元素。iterator()
:返回一个用于遍历集合的迭代器。toArray()
:将集合转换为数组。
举例代码说明
以下是使用Collection
接口进行集合操作的示例代码:
// 创建一个ArrayList集合
List<String> list = new ArrayList<>();
// 添加元素
list.add("apple");
list.add("banana");
list.add("cherry");
// 判断集合是否包含指定元素
boolean containsBanana = list.contains("banana");
// 删除指定元素
list.remove("cherry");
// 遍历集合并打印元素
for (String fruit : list) {
System.out.println(fruit);
}
// 将集合转换为数组
String[] fruits = list.toArray(new String[0]);
上述代码中,首先创建了一个ArrayList
集合,并使用add
方法添加了三个元素。接着使用contains
方法判断集合中是否包含指定元素,使用remove
方法删除指定元素,使用for-each
循环遍历集合并打印元素,最后使用toArray
方法将集合转换为数组。
以上是关于Collection
接口的概述、常用方法和举例代码说明。在实际编程中,Collection
接口及其实现类常用于存储和处理一组对象的场景,如集合数据的添加、删除、查找、遍历等操作。
2. Iterator 迭代器
在 Java 中,Iterator
(迭代器)是用于遍历集合(Collection)中元素的一种常用方式。它是一个接口,定义了一些用于访问集合中元素的方法,通过调用这些方法,可以按顺序访问集合中的每一个元素。
概述
Iterator
接口是 Java 集合框架中的一个接口,它定义了用于遍历集合中元素的方法,包括 hasNext()
、next()
和 remove()
等。通过使用 Iterator
接口,可以在不知道集合的具体实现类型的情况下,遍历集合中的元素,实现了解耦合的效果。
常用方法
Iterator
接口提供了一些常用的方法,以下是一些常用的方法:
hasNext()
:判断集合中是否还有下一个元素,返回布尔值。next()
:返回集合中的下一个元素,并将迭代器位置向后移动。remove()
:从集合中删除通过next()
方法返回的元素。
举例代码说明
以下是使用 Iterator
进行集合遍历的示例代码:
// 创建一个ArrayList集合
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
// 获取Iterator迭代器
Iterator<String> iterator = list.iterator();
// 使用Iterator遍历集合
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
}
// 使用Iterator删除集合中的元素
iterator = list.iterator();
while (iterator.hasNext()) {
String fruit = iterator.next();
if (fruit.equals("banana")) {
iterator.remove();
}
}
上述代码中,首先创建了一个 ArrayList
集合,并使用 add
方法添加了三个元素。然后通过调用 iterator
方法获取集合的迭代器。接着使用 while
循环和 hasNext()
、next()
方法遍历集合中的元素,并使用 remove()
方法删除集合中的指定元素。注意,在使用 Iterator
的 remove()
方法删除元素时,应该使用迭代器的 remove()
方法而不是集合的 remove()
方法,以避免可能的并发修改异常。
以上是关于 Iterator
迭代器的概述、常用方法和举例代码说明。在实际编程中,Iterator
接口常用于遍历集合中的元素,特别适用于需要在遍历过程中删除元素的情况。
3. 泛型
在 Java 中,泛型是一种强大的特性,允许在编译时期指定集合中元素的类型,从而增加了类型安全性和代码的可复用性。泛型可以用于类、接口、方法等地方,使得代码更加灵活和可读。
概述
泛型是一种编译时期的类型检查机制,允许在定义类、接口、方法时使用类型参数来代替具体的类型。这样,我们可以在使用这些类、接口、方法时指定实际的类型,从而避免了类型转换和运行时错误。
泛型的优点有:
- 提供了编译时期的类型检查,减少了类型错误的可能性。
- 提高了代码的可读性和可维护性,使得代码更加灵活和通用。
- 避免了类型转换的开销,提高了性能。
常用方法
泛型在 Java 中有一些常用的用法,包括:
- 泛型类:使用类型参数定义的类,可以在创建对象时指定类型,例如
ArrayList
。 - 泛型接口:使用类型参数定义的接口,可以在实现接口时指定类型,例如
List
。 - 泛型方法:使用类型参数定义的方法,可以在调用时指定类型,例如
public void printList(List list)
。 - 通配符:使用
?
表示的通配符,可以匹配任意类型,例如List
。 - 上界通配符:使用
extends
关键字限制类型的上界,例如List
。 - 下界通配符:使用
super
关键字限制类型的下界,例如List
。
举例代码说明
以下是使用泛型的示例代码:
// 定义一个泛型类
class MyArrayList<T> {
private T[] array;
public MyArrayList(T[] array) {
this.array = array;
}
public T get(int index) {
return array[index];
}
public void set(int index, T value) {
array[index] = value;
}
}
// 使用泛型类
Integer[] intArray = new Integer[3];
MyArrayList<Integer> myList = new MyArrayList<>(intArray);
myList.set(0, 1);
int value = myList.get(0);
// 定义一个泛型方法
public static <T> void printList(List<T> list) {
for (T item : list) {
System.out.println(item);
}
}
// 使用泛型方法
List<String> stringList = new ArrayList<>();
stringList.add("apple");
stringList.add("banana");
stringList.add("cherry");
printList(stringList);
上述代码中,首先定义了一个泛型类 MyArrayList
,可以接收任意类型的数组,并提供了对数组元素的访问和修改方法。然后定义了一个泛型方法 printList
,可以打印任意类型的集合元素。