二十一.集合
1.作用
动态的存储一组数据类型相同的数据
2.特点
长度可变
3.名称
长度:集合中存在的元素个数
下标:元素在集合中的位置
元素:集合中存储的数据
4.体系结构
1.Collection
分类:List,Set
List 特点:有序(存入好人取出顺序一致),由下标,可以重复 子类: ArrayList: 特点:JDK1.2出现,线程不安全的 数据结构:数组 特点:查询效率高,增删效率低 LinkedList 特点:查询效率低,增删效率高 数据结构:链表 Vector: 特点:JDK1.0出现,线程安全 数据结构:数组 Set 特点:无序,无下标,元素不允许重复 子类: HashSet 底层:HashMap 数据结构: JDK1.8以前数组+链表 JDK1.8之后数组+链表+红黑叔树 TreeSet 数据结构:红黑树 注意:指定比较规则 LinkedHashSet 特点:有序 数据结构:数组+双向链表
Collection提供的方法
增: boolean add(E e) 作用:一次添加一个数据 参数:要添加的数据 返回值:是否添加成功 boolean addAll(Collection<? extends E> c); 作用:一次添加一组数据 参数:要添加的数据集合 返回值: 是否添加成功,哪怕只添加一个也算成功,全部失败才是失败 删: boolean remove(Object o) 作用:一次删除一个数据 参数:要删除的数据 返回值:是否删除成功 注意:如果集合中有多个要删除的数据,智能删除第一个 boolean removeAll(Collection<?> c) 作用:一次删除一组数据 参数:要删除的数据集合 返回值:是否删除成功 注意:如果原集合中多次出现删除集合中的数据,那么元集合中的该数据会全部被删除 void clear() 作用:清空集合中的数据 查: int size() 作用:查询集合长度 boolean contains(Object o); 作用:判断集合中是否包含指定元素 boolean containsAll(Collection<?> C) 作用:判断集合中是否全部包含指定的集合中的元素 注意:判断的是是否全部包含 boolean isEmpty(); 作用:判断集合是否为空集合 注意:空集合表示集合中没有元素,而不是集合为null Iterator<E> Iterator() 作用:获取当前集合的迭代器 迭代器方法: boolean hasNext();判断下一个是否有值 E next(); 移动游标,并返回指向的数据
特殊情况
遍历: 迭代器 foreach
5.List提供的方法
增:
void add(int index, E element)
作用:给指定位置插入一个数据
void addAll(int index,Collection<E> C)
作用:给指定位置插入一组数据
删:
E remove(int index)
作用:删除指定位置的数据
改:
E set(int index,E element)
作用:修改指定位置的元素
参数:1参,指定的位置;2参,修改后的元素
查:
E get(int index)
作用:获取指定位置的元素
6.HashSet的剔重原理
1.存入对象先判断对象的hashCode值是否与已经存储的数据hashcode值是否相同
2.如果相等,在使用本次存入的对象与集合中的对象使用equals方法一一比较
3.如果equals也相同,认为对象已经存储,将不再存入该对象
7.TreeSet存储
TreeSet存储的数据
要么拥有比较性(让存储的对象的类实现Comparable)
要么指定比较器(创建TreeSet传入Comparator对象)