单列集合collection总接口
* 分支(实现了collection接口)...(list、set)
* list有索引值、可以重复、有序
* 实现了list接口
* arraylist:底层数据结构是数组:查询快增删慢
* 数组直接通过索引值去找元素所以查询快
* 比如数组较长,你删第一个元素后面的每个元素都要向前挪一位。
* 动的元素较多耗费时间空间较多所以增删慢,添加也要挪
*
* linkedlist:底层数据结构是链表:查询慢增删快
* 双向链表前面是上一个元素的地址值,后面是后一个元素的地址值。
* 增删看下面图,动的空间较少所以快,增加同理
* 查询也要根据后一个地址值一个一个去查询,比较耗费空间所以慢
* vector(较少使用)和arraylist类似
*
* set没有索引值、不可以重复
* set新增过程(不可重复)
*
计算新增元素的哈希值是十进制的地址值调用hashcode();object父类方法
通过计算哈希值数值程度去确定元素新增的索引之位置,
如果没有元素 新增,
如果有元素,判断是否相同,如果相同,不新增
如果不相同,挂到最后一个元素下面
判断的标准:
比较哈希值是否相同&&(地址值||equals相同)
* hash set(无序)底层数据结构是哈希表 。 底层是hash map
* linked hash set(有序)底层数据结构是链表+哈希表。底层是linkedhash map
* tree set(可排序)底层数据结构是红黑树。底层是three map
* Map双列集合总接口
* 特点:一个元素是有一个K和一个V组成。K和V可以是于任意引用数据类型
* K不能重复,判断重复的标准和set集合重复判断的标准一致
* 常用实现类:
* hashmap 无序底层是哈希值,线程不安全(没加synchronized代码块)所以效率低,K、V可以为null
* linkedhash map 有序底层是链表加哈希表
* three map 可排序底层是红黑树
* hashtable 线程安全(加了synchronized代码块)需要更多空间所以效率低,K、V不能是null
* 数据结构
* 栈 :先进后出,后进先出【图片】
* 队列 :先进先出【图片】
* 数组:查询快,根据索引值获取元素,增删慢数组必须是一块连续的空间【图片】
* 链表:查询慢,增删快【图片】
* 红黑树:查询增删都比较快
*