容器就是集合
Collection 接口:
java中没直接继承Collection的类,只提供了两个实现这个几口的子接口list和set;
List接口:
有索引
可重复
有序性
备注:方便查询
Set接口:
无索引
唯一性(不可重复,存入元素自动去重)
无序性
备注:方便增删
List和Set的区别:
1 Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
2 List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。
Map:
存储元素为建筑队的形式:K-V
ArrayList:
实现List接口
可重复
有序性
查询效率高
数组大小可变
性能更好
非同步(多线程不可用)
HashSet:
无索引
唯一性(不可重复,存入元素自动去重)
无序性
允许有一个元素值为null
链表:连接不同的节点,每个数据都是一个节点(链表方便增删);
单向链表:关注表头
链表头:左边存的是这个节点的数据,右边存的是下一个节点的地址(引用,指针)
双向链表:表中间是本节点数据,左边存上一个节点的地址,右边存下一个节点地址.
单向链表:只有一个下一个节点的指针
优点:单向链表增加删除节点简单。遍历时候不会死循环;
缺点:单向链表,只能从头到尾遍历,从头到尾遍历,类似瀑布模型,只能前进不能后退,只能找到它下一个节点
双向链表:有两个指针,一个指向前一个节点,一个后一个节点
优点:可以找到前驱和后继,可进可退;
缺点:增加删除节点复杂,需要多分配一个指针存储空间。
适用于需要双向查找节点值的情况。
哈希表:
LinkedHashSet:
具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。
TreeSet:
该类实现了Set接口,可以实现排序等功能
HashMap:
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
该类实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。
遍历的三种方式:普通for 增强for 迭代器.