集合就像一个容器可以动态的将多个对象的引用存放到容器中
collection接口是存储一组对象的方法的集合
list和set继承了connection
list 中存储的是有序不唯一的数据
list处除了从connection集合中继承的方法外,list集合中添加了根据索引来操作集合元素的方法,add(索引,元素),get()获取指定索引位置的元素,remove() 删除指定索引位置的元素
lisi的常用的实现类有arrayList(),LinkedList
arrayList就是一个长度可变的数组 在jdk1.7 arrayList直接创键出来他的初始容量就位10 1.8一开始的容量为0当添加第一个元素的时候在创建一个容量为10的数组 元素数量大于数组长度时扩展1.5倍
linkedList的底层是双向链表他的内部没有声明数组而是定义了Node类型的first和last,用于记录首末元素,同时定义内部类Node,作为linkedlist中保存数据的基本结构,node除了保存数据还定义了prev(per 五) next lai 保存上一个和下一个元素的位置
set中存储的是无序唯一的数据
set的常用实现类是hsahSet hsahSet 是数组和链表的结合体
对于存放在Set容器中的对象,对应的类一定要重写equals()和hashCode(Object obj)
当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法
来得到该对象的 hashCode 值,然后根据 hashCode 值,通过某种散列函数决定该对象
在 HashSet 底层数组中的存储位置。hashCode() 方法可以简单的理解成一个随机函数
如果两个元素的hashCode()值相等,会再继续调用equals方法,如果equals方法结果为true,添加失败;如果为false,那么会保存该元素,但是该数组的位置已经有元素了,
那么会通过链表的方式继续链接。
如果两个元素的 equals() 方法返回 true,但它们的 hashCode() 返回值不相
等,hashSet 将会把它们存储在不同的位置,但依然可以添加成功
connection提供了常用的方法 往集合中添加元素 add() addAll()添加一个集合 size()获取有效元素的和个数 iterator()获取迭代器对象
connection接继承了Iterable (in for 若bo) 接口该接口有一个iterator()方法 所以实现了connection接口的集合类的都有一个iterator()方法
iteratar仅用于遍历集合本身不具备封装对象的能力 如果需要创建iterator对象就必须要又一个被迭代的集合
集合对象每次调用iterator方法都会得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前
使用iterator的next()方法之前不必须要调用hasNext()进行检测 如果不调用 企鹅下一条记录无效,直接调用next() 如果没有元素会抛出NoSuchElementException异常(no 撒吃 案例们特 )找不到元素
iterator可以删除集合中的元素单遍历过程中是通过迭代器的remove方法不是集合的remove方法
如果还未调用next()方法或者在上一次调用next()方法之后已经调用remove方法,再调用remove都会爆IllegalStateException。
(以雷bo 思得特)
#该异常表示,当前对客户端的响应已经结束,不能在响应已经结束(或说消亡)后再向客户端(实际上是缓冲区)输出任何内容。
Map是以键值对的方式存储的 map中的键是无序唯一的 和connection并列存在
4.jdk8中底层结构:数组+链表+红黑树
map常用的实现类是hashmap 实在调用put方法的时候3.创建长度为16的数组
当数组的某一个索引位置上的元素以链表形式存在的数据个数 > 8 且当前数组的长度 > 64时,此时此索引位置上的所数据改为使用红黑树存储