Java集合,也称为容器,主要由两大接口Collection和Map派生而来。
Collection接口:存放一组不唯一,无序的对象
Collection 是最基本的集合接口,一个Collection代表一组Object
Collection派生出三个子接口:List, Set, Queue.
操作集合:
增:
向集合添加元素e,若指定集合元素改变了则返回true
boolean add(E, e);
把另一个集合的元素全部添加到集合中,若指定集合元素改变返回true
boolean addAll(Collection<? extends E> c);
删:
删除指定元素
boolean remove(Object o);
删除集合中所有元素
boolean removeAll(Collection<?> c);
查:
如果包含指定元素返回true
boolean contains(Object o);
如果此集合包含指定集合所有元素返回true
boolean containsAll(Collection<?> c);
改:
无直接操作
List接口:存放一组不唯一, 有序的元素
List是一个有序的Collection,能够通过索引访问List中的元素
实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack
1)ArrayList:
ArrayList是一个动态数组,允许任何符合规则的元素插入,每个ArrayList都有一个初始容量。每次向容器中增加元素时会进行容量检查,如果溢出就会进行扩容操作。
ArrayList<泛型> list=new ArrayList<>();
2)LinkedList:
LinkedList是一个双链表,内部以链表的形式保存集合中元素,在随机访问元素性能上较差,而在插入删除元素时有较好的性能
LinkedList<泛型> list = new LinkedList<>();
3)Vector:
Vector是矢量变量,它的操作是线程安全的,操作和ArrayList几乎一样
Vector vec = new Vector();
4)Stack:
Stack继承自Vector,对Vector进行了扩展,提供5个额外的方法使其可以当作栈堆使用
empty()
peek():查看堆栈顶部的对象,但不从堆栈中移除它
pop():移除堆栈顶部的对象,并作为此函数的值返回该对象
push(E item):把项压入堆栈顶部
search(Object o)
5)Iterator:
Iterator是一个接口,它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素
提供以下接口:
boolean hasNext(): 判断集合里是否存在下一个元素
Object next():返回集合里下一个元素
void remove():删除集合里上次next返回的元素
实例:
import java.util.ArrayList;
import java.util.Iterator;
public class testIterator {
public static void main(String[] args) {
//创建集合
ArrayList<String> str = new ArrayList<String>();
str.add("Marry");
str.add("Tom");
str.add("Tomas");
str.add("Nancy");
//获取迭代器
Iterator<String> it = str.iterator();
//遍历集合
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
ListIterator继承Iterator接口,在Iterator的基础上增加了几个方法:
boolean hasPrevious():判断集合里是否有上一个元素,有则返回true
Object previous():返回集合上一个元素
void add(Object o):在指定位置插入一个元素
ListIterator增加了向前迭代的功能,还可以通过add向集合里添加元素。Iterator只能删除。
Set接口:存储无序,不重复元素
set不允许存储相同的元素,所以把相同的元素添加到同一个集合中,则操作失败,新元素不会添加,add()方法返回false
1)HashSet类:无序
HashSet是Set集合最常用实现,按照hash算法来存储元素,有很好的存取和查找性
特点:
- 不能保证元素的顺序
- 不是线程同步
- 集合元素值可以是null
HashSet存储元素时,调用对象的hashCode()方法得到其hashCode值,根据hashCode值得到决定改对象的存储位置
HashSet判断两个元素是否相等:
(1)equal()方法比较值
(2)hashCode()方法返回值相等
2)LinkedHashSet类:有序
HashSet的一个子类,采用哈希表存储结构,使用链表维护次序。
根据hashCode()值来决定存储位置,但用链表来维护元素的次序, 元素的顺序与添加顺序一致
3)TreeSet类:
插入的同时就立刻排序
支持两种排序方法:自然排序和定制排序, 默认为自然排序
自然排序:
调用compareTo(Object obj)方法比较元素大小,按照升序排序,该方法返回0,两数相等;返回一个正数,obj1大于obj2;返回负数,obj1小于obj2
定制排序:
在创建TreeSet集合对象时,提供一个Comparator对象与该TreeSet集合关联,有Comparator对象负责元素的排序逻辑
自然排序实现Comparable接口,定制排序实现Comparator接口