目录
集合
集合是java提供的一种容器,可以用来存储多个数据。
集合与数组的区别:
- 数组长度固定,集合长度可变;
- 数组存储通用类型元素,可以存储基本类型值和引用类型。集合只存储引用类型,且类型可不一致。
实际开发中当对象比较多,使用集合进行存储。
集合按照存储结构可分为单列集合(java.util.Collection
)和双列集合(java.util.Map
)。它们是 Java 集合的根接口,这两个接口又包含了一些子接口或实现类。
集合的结构图如下:
Collection
介绍
Collection是单列集合类的根接口,有两个重要的子接口,java.util.List
和java.util.Set
。
java.util.List
的特点是元素有序,可重复;java.util.Set
元素无序不可重复。
java.util.List
主要实现类有java.util.ArrayList
和java.util.LinkedList
。
java.util.Set
的主要实现类有java.util.HashSet
和java.util.TreeSet
。
Collection通用方法
方法名称 | 说明 |
---|---|
boolean add(E e) | 向集合中添加一个元素。 |
boolean contains(Object o) | 判断集合中是否存在指定元素。 |
boolean isEmpty() | 判断集合是否为空。 |
int size() | 返回集合中元素的个数。 |
void clear() | 清除集合中的所有元素,将集合长度变为 0。 |
Object[] toArray() | 把集合转换为一个数组。 |
boolean remove(Object o) | 从集合中删除一个元素,当集合中包含了一个或多个元素 o 时,只删除第一个元素,该方法将返回 true。 |
Iterator<E> iterator() | 返回一个 Iterator 对象,用于遍历集合中的元素 。 |
boolean addAll(Collection c) | 向集合中添加集合 c 中的所有元素,如果集合对象被添加操作改变了,则返回 true。 |
boolean removeAll(Collection c) | 从集合中删除所有在集合 c 中出现的元素(相当于把调用该方法的集合减去集合 c)。如果该操作改变了调用该方法的集合,则该方法返回 true。 |
boolean containsAll(Collection c) | 判断集合中是否包含集合 c 中的所有元素。 |
boolean retainAll(Collection c) | 从集合中删除集合 c 里不包含的元素(相当于把调用该方法的集合变成该集合和集合 c 的交集),如果该操作改变了调用该方法的集合,则该方法返回 true。 |
示例:
import java.util.ArrayList;
import java.util.Collection;
/*
Collection接口的方法测试
*/
public class CollectionTest {
public static void main(String[] args) {
// 使用多态测试
Collection<String> collection = new ArrayList<>();
System.out.println(collection); // 重写了toString方法
// 添加元素add
collection.add("a");
collection.add("b");
collection.add("c");
collection.add("d");
System.out.println(collection); // [a, b, c, d]
// 删除元素remove
collection.remove("d");
System.out.println(collection); // [a, b, c]
collection.remove("e"); // 删除失败返回false
// 包含contains
System.out.println(collection.contains("c")); // 包含返回true
// 判断集合是否为空isEmpty
System.out.println(collection.isEmpty()); // 不是空返回false
// 元素个数size
int num = collection.size();
System.out.println(num); // 3
// 清空
collection.clear();
System.out.println(collection); // []
System.out.println(collection.size()); // 0
System.out.println(collection.isEmpty()); // true
// 增强for循环
for (String s : collection) {
System.out.println(s);
}
}
}
Iterator迭代器
java,util.Iterator
接口,对集合进行迭代的迭代器。
有如下两个方法:
1.boolean hasNext()
判断还有没有元素可取,有返回true,否则false
2.next()
:返回迭代的下一个元素
使用迭代器,需要接口的实现类对象,使用Collection接口的iterator()方法就返回了迭代器的实现类,使用Iterator接口接受(多态),Iterator的泛型和集合接口相同。
示例:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorTest {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("aa");
collection.add("bb");
collection.add("cc");
collection.add("dd");
// 创建一个迭代器
Iterator<String> iterator = collection.iterator();
iterator.hasNext();
System.out.println(iterator.next()); // aa
// 循环遍历
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
for (Iterator<String> iterator2 = collection.iterator(); iterator2.hasNext() ;) {
System.out.println(iterator2.next());
}
}
}
Collection之List集合
List通用特性
java.util.List
接口继承Collection
接口。
List的特点
- 有序
- 有索引
- 允许元素重复
所以List有和索引相关的特有方法:
public void add(int index, E element)
:添加元素到指定位置
public E get(int index)
:返回指定位置的元素
public E remove(int index)
:移除指定位置元素并返回
public E set(int index, E element)
:替换指定位置元素并返回替换前的那个元素
public int indexOf(Object o)
:获取指定元素在集合中第一次出现的索引下标
subList(2,4)
:取索引下标在大于等于2小于等于4的元素
boolean addAll(int index, Collection<? extends E> c)
:在指定索引位置把新集合元素加到原集合
ArrayList集合和 LinkedList集合
ArrayList和 LinkedList比较
ArrayList底层是用数组结构进行存储的,数组的存储空间是连续的,可以通过下标来访问元素。
特点:查询快,增删慢。支持异步。
LinkedList的底层采用了双向链表数据结构,所以空间存储上内存地址不连续。不能通过数学表达式计算被查找元素的内存地址,所以每次查找的时候都是从头节点开始遍历,直到找到位置。
特点:增删快,查询慢。支持异步
使用区别:ArrayList更适合随机查找,LinkedList更适合删除和添加。
LinkedList集合特有方法
增
public void addFirst(E e)
:添加到第一个元素,等于add(E e);
public void addLast(E e)
:添加到最后一个元素;
public boolean offer(E e)
:向链表末尾添加元素,返回是否成功;
public boolean offerFirst(E e)
:头部插入元素,返回是否成功;
public boolean offerLast(E e)
:尾部插入元素,返回是否成功;
删
public E removeFirst()
:删除并返回第一个元素,等于public E remove()
;
public E removeLast()
:删除并返回最后一个元素;
public E remove()
:删除并返回第一个元素;
查
public E getFirst()
:返回第一个元素;
public E getLast()
:返回最后一个元素;
public int indexOf(Object o)
:查找指定元素从前往后第一次出现的索引;
public int lastIndexOf(Object o)
:查找指定元素最后一次出现的索引;
public E peek()
:返回第一个元素;
public E element()
:返回第一个元素;
public E peekFirst()
:返回头部元素;
public E peekLast()
:返回尾部元素;