集合
可以存储不同类型的数据
是存储对象数据的容器
集合的长度可以发生变化
Collection 集合的根接口
|-List 有序可重复
|------ArrayList
|------LinkList
|------Vector
|-Set 无序不可重复
|------HashSet
|------LinkHashSet
|------TreeSet
collection常用方法
add(E e) 添加元素之后返回boolean值
Collection c = new ArrayList();
c.add("add");
addAll(Collection c)
Collection<E> cc = new ArrayList<>();
cc.add((E) "addAll");
clear() remove(Object o) 删除指定元素并返回boolean 值cc.addAll(c);
removeAll(Collection c)
retainAll(Collection c) //保留交集元素c.removeAll(cc); //删除c集合中与cc的交集元素,也就是重复元素,删除的是c中的元素
size() // 查看元素的个数
isEmpty() // 是否为空contains(Object o) // 判断是否存在重复的元素,内部的实现是依赖equals方法
containsAll(Collection<?> c)c.containsAll(c2)//c集合有包含c2集合中的所有元素
toArray() //把集合中的全部元素存储到一个obj 的数组
iterator() //迭代器 返回的是实现类的对象
Collection c = new ArrayList();
Iterator it = c.iterator(); //返回一个迭代器
// iterator 实际 上返回的是iterator接口的实现类对象。
boolean hasNext() 如果仍有元素可以迭代,则返回 true。 当前指针指向的位置是否有元素
public boolean hasNext() {
return cursor != size;
}//源码hasNext的实现
while(it.hasNext()){ // hasNext() 是否有元素可以遍历。
System.out.println("元素:"+ it.next()); //获取元素
}
next() 返回迭代的下一个元素。 输出当前的元素,移动指针到下一个元素的位置
void remove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
//清空集合 的元素
while(it.hasNext()){
it.next();
it.remove();
}
List
list继承了collection,有序可重复,进去和出来的顺序一致,先进先出只有List接口下面的集合类才具有索引值,其他集合类都没有索引值add(int index, E element) //在指定位置插入指定元素
addAll(int index, Collection<? extends E> c) //添加另一个集合到本集合的末尾处
get(int index) //根据索引值获取元素
indexOf(Object o) //查找指定元素的索引值
lastIndexOf(Object o) //最后一次出现的位置
subList(int fromIndex, int toIndex) // 截取指定从fromindex 到toindex 的元素(包头不包含尾)
set(int index, E element) // 替换指定索引值得元素
listIterator() //父接口是literator
hasPrevious() //判断是否存在上一个元素。
previous() // 当前指针先向上移动一个单位,然后再取出当前指针指向的元素。
next(); // 先取出当前指针指向的元素,然后指针向下移动一个单位。
add //插入到当前指针的位置
set// 替代迭代器最后一次返回的元素
在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素个数,
如果需要添加或者删除只能使用迭代器的方法进行操作。
如果使用过了集合对象改变集合中元素个数那么就会出现ConcurrentModificationException异常。
ArrayLIst
内部实现的是object数组初始长度为10ArrayList 底层是维护了一个Object数组实现 的, 特点: 查询速度快,增删慢。
LinkList
hasPrevious() 判断是否存在上一个元素。previous() 当前指针先向上移动一个单位,然后再取出当前指针指向的元素。
next(); 先取出当前指针指向的元素,然后指针向下移动一个单位。add(E e) 把当前有元素插入到当前指针指向的位置上。set(E e) 替换迭代器最后一次返回的元素。
LinkedList底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
Vector
维护了一个Object的数组实现的,实现与ArrayList 一样 ,但是Vector是线程安全的,操作效率低。
HashSet
是用一个哈希表来实现的,存取速度快在判断是否添加相同元素时,不仅要重写hashcode方法还要重写equals方法
TreeSet
是基于二叉树实现基于元素的自然书顺序排序如果元素不具备自然顺序则需要继承comparable接口重写comparto方法compareTo方法返回 的是0,那么该元素就被视为重复元素,不允许添加.一般都自己写Comparator比较器,在创建treeset对象时传入比较器class 类名 implements Comparator{ }
Collections