集合的由来:
数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,java内部提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随元素的减少而减少
数组和集合的区别:
1.数组既可以存储基本数据类型,又可以存储引用数据类型
集合只能存储引用数据类似(对象)。集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
2.数组长度是固定的,不能自动增长
集合的长度是可变的,不能自动增长
数组和集合什么时候用
1.如果元素个数是固定的,推荐用数组
2.如果元素个数不是固定的推荐用集合
集合体系图:
Collection 单例集合的根接口
List 如果是实现了List接口的集合类,具备的特点: 有序,可重复。
ArrayList ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
Vector(了解即可) 底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
Set 如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
HashSet 底层是使用了哈希表来支持的,特点: 存取速度快.
TreeSet 如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。
int size() 获取元素个数
boolean isEmpty() 是否个数为 0
boolean contains(Object element) 是否包含指定元素
boolean add(E element) 添加元素,成功时返回 true
boolean remove(Object element) 删除元素,成功时返回 true
Iterator<E> iterator() 获取迭代器
boolean containsAll(Collection<?> c) 是否包含指定集合 c 的全部元素
boolean addAll(Collection<? extends E> c) 添加集合 c 中所有的元素到本集合中,如果集合有改变就返回 true
boolean removeAll(Collection<?> c) 删除本集合中和 c 集合中一致的元素,如果集合有改变就返回 true
boolean retainAll(Collection<?> c) 保留本集合中 c 集合中两者共有的,如果集合有改变就返回 true
void clear() 删除所有元素
成员方法 :
toArray:将集合转换成数组(会将对象变为Object,需要向下转型才能调用内部特有方法)
Arrays.aslist(array) 将数组转化为集合
迭代器:
迭代器概述:
集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
迭代器原理:
迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和Next()方法,这样做也是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有2个:1规定了整个集合体系的方法都是hasNext()和next()。2代码底层内部实现,使用者不用管怎么实现,会用即可
it.remove() 删除最后操作的元素.
list接口:
add(int index,E element) 在指定位置添加
remove(int index) 根据索引删除
get(int index) 根据索引获取
set(int index, E element) 指定位置修改
ListIterator:在list迭代中可操作
void hasPrevious() 判断游标前面是否有元素;
Object previous() 返回游标前面的元素,同时游标前移一位。游标前没有元素就报 java.util.NoSuchElementException 的错,所以使用前最好判断一下;
int nextIndex() 返回游标后边元素的索引位置,初始为 0 ;遍历 N 个元素结束时为 N;
int previousIndex() 返回游标前面元素的位置,初始时为 -1,同时报 java.util.NoSuchElementException 错;
void add(E) 在游标 前面 插入一个元素 注意,是前面
void set(E) 更新迭代器最后一次操作的元素为 E,也就是更新最后一次调用 next() 或者 previous() 返回的元素。注意,当没有迭代,也就是没有调用 next() 或者 previous() 直接调用 set 时会报 java.lang.IllegalStateException 错;
void remove() 删除迭代器最后一次操作的元素,注意事项和 set 一样。