集合

1.1 集合知识回顾
集合类的特色:提供一种存储空间可变的存储模式,存储的数据容量能够随时发生改变前端

1.2集合类体系结构程序员

集合
--Collection(单列)
----List(可重复)
------ArrayList
------LinkedList
----Set(不可重复)
------HashSet
------TreeSet
--Map(双列)
----HashMap后端

Collection集合概述和使用
Collection集合概述:
是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection集合的元素
JDK不提供此接口的任何直接实现,它提供更具体的子接口(如Set何List)实现数组

建立Collection集合的对象
多态的方式
具体的实现类ArrayList数据结构

Collection集合经常使用方法
boolean add(E e) 添加元素
boolean remove(Object o) 从集合中移除指定元素
void clear() 清空集合元素
boolean contains(Object o) 判断集合中是否存在指定的元素
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也就是集合中元素的个数并发

Collection集合的遍历
Iterator:迭代器,集合的专用遍历方式
Iterator<E> iterator():返回此集合中元素的迭代器,经过结合的iterator()方法获得
迭代器是经过结合的iterator()方法获得的,因此咱们说它是依赖于集合而存在的ide

Iterator中的经常使用方法
E next():返回迭代中的下一个元素
boolean hasNext():若是迭代具备更多元素,则返回true优化

List集合概述和特色
List集合概述
有序集合(也称为序列),用户能够精准控制列表中每一个元素的插入位置,用户也能够经过索引访问元素,并搜索索引
列表中的元素
与Set集合不一样,列表一般运行重复的元素对象

List集合特色
有序:存储和取出的元素顺序一致
可重复:存储的元素能够重复排序


List集合特有方法
void add(int index,E element) 在此集合中的指定位置插入指定的元素
E remove(int index) 删除指定索引处的元素,返回被删除的元素
E set(int index,E element) 修改指定位置的元素,返回被修改的元素
E get(int index) 返回指定索引处的元素

并发修改异常
ConcurrentModificationException
产生缘由:迭代器遍历的过程当中,经过集合对象修改了集合中元素的长度,形成了迭代器获取元素中判断
预期修改值和实际修改值不一致
解决方案
用for循环遍历,而后用集合对象作对应的操做便可

ListIterator
ListIterator:列表迭代器
经过List集合的listIterator()方法获得,因此说他是List集合特有的迭代器
用于程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置

ListIterator中的经常使用方法
E next() 返回迭代中的下一个元素
boolean hasNext() 若是迭代具备更多元素,则返回ture
E pervious() 返回列表中的上一个元素
boolean hasPrevious() 若是此列表迭代器在相反方向遍历列表时具备更多元素,则返回ture
void add(E e) 将指定元素插入列表

加强for循环
加强for:简化数组和Collection集合的遍历
实现Iterable接口的类容许其对象成为加强型for语句的目标
它是JDK5以后出现的,其内部原理是一个iterator迭代器
格式:

for(元素数据类型 变量名:数组或者Collection集合){
    //在此集合变量,该变量就是元素
}

 

常见数据结构
常见数据结构之栈
数据进入栈模式的过程称为:压/进栈
数据离开栈模式的过程称为:弹/出栈
栈是一种数据先进后出的模型
常见数据结构之队列
数据从后端进入队列模型的过程称为:入队列
数据从前端离开队列模型的过程称为:出队列
队列是一种数据先进先出的模型
常见数据结构之数组
查询数据经过索引定位,查询任意数据好事相同,查询效率高
删除数据时,要将原始数据删除,同时后面每一个数据前移,删除效率低
添加数据时,添加位置后的每一个数据后移,再添加元素,添加效率极低
数组是一种查询快,增删慢的模型
常见数据结构之链表
链表是一种增删快的模式(对比数组)
链表是一种查询慢的模式(对比数组)

List集合子类特色
List集合常见子类:ArrayList、LinkedList
ArrayList:底层数据结构是数组,查询快,增删慢
LinkedList:底层数据结构是链表,查询慢,增删快

LinkedList集合的特有功能
public void addFirst(E e) 在该列表开头插入特色的元素
public void addLast(E e) 将指定的元素追加到此列表的末尾
public E getFirst(E e) 返回此列表的第一个元素
public E getLast(E e) 返回此列表的最后一个元素
public E addFirst(E e) 今后列表中删除并返回第一个元素
public E addLast(E e) 今后列表中删除并返回最后一个元素

Set
Set集合概述和特色
Set集合的特色
不包含重复元素的集合
没有带索引的方法,因此不能使用普通for循环遍历

哈希值
哈希值:是JDK根据对象的地址或字符串或者数字计算出来的int类型的数值
Object类中有一个方法能够获取对象的哈希值
public int hashCode():返回对象的哈希码值
对象的哈希值特色
同一个对象屡次调用hashCode()方法返回的哈希值是相同的
默认状况下,不一样对象的哈希值是不一样的。而重写hashCode()方法,能够实现让不一样对象的哈希值相同

HashSet集合概述和特色
HashSet集合特色
底层数据结构是哈希表
对集合的迭代顺序不做保证,也就是说不保证存储和取出的元素顺序一致
没有带索引的方法,因此不能使用普通的for循环遍历
因为是Set集合,因此是不包含重复的集合

HashSet集合存储元素
要保证元素惟一性,须要从新hashCode()和equals()

常见数据结构之哈希表
哈希表
JDK8以前,底层采用数组+链表实现,能够说是一个元素为链表的数组
JDK8以后,在长度比较长的时候,底层实现了优化

LinkedHashSet集合概述和特色

LinkedHashSet特色
哈希表和链表实现的Set接口,具备可预测的迭代次序
由链表保证元素的有些,也就是说元素的存储和取出顺序是一致的
有哈希表保证元素惟一,也就是说没用重复的元素

TreeSet集合概述和特色
TreeSet集合特色
元素有序,这里的顺序不是指存储和取出的顺序,而是按照必定的规则进行排序,具体排序方式取决于构造方法
TreeSet():根据其元素的天然排序进行排序
TreeSet(Comparator):根据指定的比较器进行排序
没有带索引的方法,因此不能使用普通for循环遍历
因为是Set集合,因此不包含重复的集合

天然排序Comparable的使用
就是让元素所属的类实现Comparable接口,从新comparaTo(T o)方法
重写方法时,必定要注意排序规则要求的主要条件和次要条件来写

比较器排序Comparator的使用
用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序的元素进行排序的
比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compareTo(T o1,T o2)方法
重写方法时,必定要注意排序规则要求的主要条件和次要条件来写

重写的compareTo方法中返回0:新元素不会添加进来返回1:会升序排列返回-1:会降序排列

相关文章
相关标签/搜索