最近在开发过程中,发现自己对java集合的了解已经忘得差不多了,作为开发者,这可不是一件好事哈,之前开始学习java基础的时候,学过一段时间的java集合,但是现在到了工作岗位上的时候,发现自己用到的集合仅有少部分,主要使用到List和Map,.其他的用到少,可能是我项目组用的少吧,或者说我们目前居多均用List和Map就可以解决了。
废话说多了,正式来说集合篇吧:
java常见集合框架简介
我们将java集合框架称为容器,在java中,我们使用两个基本接口: Collection(List、Set、Queue等均继承自他)和 Map<K,V>。
List:有序、可重复的集合,常用的实现类有ArrayList和LinkedList。
Set:无序、不可重复的集合,常用的实现类有HashSet和TreeSet。
Map:键值对的集合,常用的实现类有HashMap和TreeMap。
Queue:队列,常用的实现类有LinkedList和PriorityQueue。
Stack:栈,常用的实现类有Stack。
Deque:双端队列,常用的实现类有ArrayDeque和LinkedList。
Iterable
作为Collection接口的顶级接口,可以用于迭代,用我们的API解释意思:作为实现这个接口运行对象成为foreach语句的目标。
Iterable<T>
接口定义了一个抽象方法iterator()
,该方法返回一个Iterator<T>
对象,用于遍历集合中的元素。
Iterator<T>
接口是Iterable接口的子接口,它定义了一些方法用于遍历集合中的元素,包括hasNext()、next()和remove()等。
通过实现Iterable<T>
接口,我们可以使用增强型的for-each循环来遍历集合中的元素,而不需要直接操作Iterator对象。
以下是一个示例代码,展示了如何使用Iterable<T>
接口和Iterator<T>
接口来遍历集合中的元素:
public class MyCollection<T> implements Iterable<T> {
private T[] elements;
private int size;
public MyCollection(T[] elements) {
this.elements = elements;
this.size = elements.length;
}
@Override
public Iterator<T> iterator() {
return new MyIterator();
}
private class MyIterator implements Iterator<T> {
private int index;
@Override
public boolean hasNext() {
return index < size;
}
@Override
public T next() {
return elements[index++];
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
public static void main(String[] args) {
Integer[] numbers = {1, 2, 3, 4, 5};
MyCollection<Integer> collection = new MyCollection<>(numbers);
for (Integer number : collection) {
System.out.println(number);
}
}
}
上述代码中,MyCollection类实现了Iterable<T>
接口,并提供了一个内部类MyIterator实现了Iterator<T>
接口。通过实现这两个接口,我们可以使用增强型的for-each循环来遍历MyCollection对象中的元素。
需要注意的是,实现Iterable<T>
接口的类必须提供一个返回Iterator<T>
对象的iterator()
方法,并且该方法不能返回null。
Collection
Collection接口是Java集合框架中的一个顶层接口,它表示一组对象的集合。Collection接口继承自Iterable接口,因此它可以被迭代(遍历)。
Collection接口定义了一系列操作集合的方法,包括添加、删除、查询、遍历等。常用的方法包括:
boolean add(E element): 将指定的元素添加到集合中。
boolean remove(Object element) 从集合中移除指定的元素。
boolean contains(Object element): 判断集合中是否包含指定的元素。
int size(): 返回集合中元素的个数。
boolean isEmpty(): 判断集合是否为空。
void clear() 清空集合中的所有元素。
Iterator<E> iterator()
: 返回一个迭代器,用于遍历集合中的元素。
Collection<E>
接口是其他集合类的基础,常见的实现类包括List、Set和Queue等。这些实现类提供了不同的数据结构和特性,以满足不同的需求。
例如,
- ArrayList和LinkedList是List接口的实现类,它们提供了有序、可重复的集合;
- HashSet和TreeSet是Set接口的实现类,它们提供了无序、不可重复的集合;
- LinkedList和PriorityQueue是Queue接口的实现类,它们提供了队列的功能。
通过使用Collection<E>
接口,我们可以以统一的方式操作不同类型的集合,使得代码更加灵活和可扩展。
public class CollectionExample {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
// 添加元素
collection.add("apple");
collection.add("banana");
collection.add("orange");
// 判断集合是否为空
System.out.println("Is collection empty? " + collection.isEmpty());
// 获取集合的大小
System.out.println("Collection size: " + collection.size());
// 遍历集合
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
// 判断集合中是否包含指定元素
System.out.println("Does collection contain 'apple'? " + collection.contains("apple"));
// 移除指定元素
collection.remove("banana");
// 清空集合
collection.clear();
// 判断集合是否为空
System.out.println("Is collection empty? " + collection.isEmpty());
}
}
Collection接口的相关方法: