引入
使用数组储存值时,储存数据方便,但是操作数据不方便。
集合框架结构
集合框架图
如下所示:
常用类
Collection List
ArrayList
LinkedList
Set
HashSet
Map
Collection
概述
Collection是最基本的集合接口, 里面储存一组不唯一,无序的对象。一个Collection代表一组Object,即Collection的元素。
子接口
Collection有三个子接口:
- List接口
List接口储存一组不唯一(允许相同),有序(按照元素插入顺序)的对象。使用此接口能够精确控制每个元素插入的位置以及访问元素。集合中第一个元素下标从0开始。List和数组类似,可以动态增长,根据实际储存的元素的长度自动增长List的长度。查找元素效率高,删除和插入效率低,因为会引起其他元素的位置的改变。
List的实现类有:ArrayList、LinkedList、Vector。
- Set接口
Set接口储存一组唯一,无序的对象。检索效率低下,删除和插入效率高。删除和插入不会引起元素位置的改变。
Set实现类有:HashSet、TreeSet
- Queue接口
常用API
- boolean add(E e)
向当前集合中添加一个元素。集合中保存的是元素的地址引用,若外部引用对元素进行修改,则集合中元素也会跟着被修改。
- boolean addAll(Collection<? extends E> c)
将指定集合中所有的元素,添加到当前集合中。true表示添加成功;false表示添加失败。
- boolean contains(Object o)
判断当前集合中是否包含给的的元素,返回true则包含;false则不包含。注意:是否包含取决于集合中是否存在元素与给定元素调用equals方法比较是否为true。
- boolean containsAll(Collection s)
判断当前集合中是否包含给的集合中的所有元素。返回true则包含;false则不包含。是否包含取决于集合中是否存在元素与给定集合中所有元素调用equals方法比较是否为true。
- int size()
返回当前集合中元素的个数。
- boolean isEmpty()
判断当前集合是否为空集合(空集合指集合中不存在元素)。true代表空集合;false代表不是空集合。
- void clear()
清空当前集合中的所有元素。
- boolean remove(Object o)
删除当前集合中的指定的元素(若存在多个相同的元素,则删除第一次equals为true的元素)。返回true表示删除成功;返回false表示删除失败。
注意:是否删除成功取决于集合中是否存在元素与给定元素调用equals方法比较是否为true。
- boolean removeAll(Collection<?> c)
从当前集合中删除指定集合中所有元素。
注意:是否删除成功取决于集合中是否存在元素与给定集合中所有元素调用equals方法比较是否为true。
- Iterator<E> iterator()
所有Collection的实现类都实现了iterator()方法,该方法返回遍历当前集合的Iterator迭代器
Iterator itr = collection.iterator(); while(itr.hasNext()){ 元素值 = itr.next(); }
建议使用字符串字面量使用.equals方法进行比较,以防止出现NullPointerException异常。
迭代器里面保存的是集合中的元素,操作迭代器元素就是操作集合里面的元素,如下所示:
public class Test3 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("1"); Iterator iterator = list.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next() == list.get(0)); } } } 结果为:true
注意:通过迭代器遍历集合时,若想要删除元素时,不能通过原集合的方法删除,只能使用迭代器的方法删除。
Iterator itr = collection.iterator(); while(itr.hasNext()){ 元素值 = itr.next(); itr.remove(); //itr.remove(); //错误,只能删一次 }
增强for循环
增强for循环是JDK1.5推出的,也叫forEach循环。用于遍历集合和数组。
其底层也是通过迭代器遍历,但使用增强for循环获取不了迭代器,因此不能使用迭代器进行删除,所以增强for循环只用于遍历集合或数组。
Map