集合
ArrayList来自List接口,ArrayList继承List,list继承Collection
List接口包括两个类 ArrayList LinkedList
ArrayList是线性结构
这种结构特点:读数据方便,添加/删除费时间.
引用数据,有脚标指示具体是哪一条数据。
List还有一种数据:链表结构
链表,读取效率低,但是添加/修改/删除效率高。
实际的处理中,往往把线性结构和链式结构合在一起。读取使用线性结构,保存数据使用链表结构。(读写分离)
增删改查都跟ArrrayList一样的。
了解底层做了什么内容。
在LinkedList链表列表类型中,有三个变量
引入一个结点类型Node,有三部分,前指针prev,后指针next,内容item
E item;
Node<E> next;
Node<E> prev;
List是列表,Set是集合 ,List和Set都继承于Collection,Set集合是可以去重.
ArrayList线性列表有序的,add的顺序就是print的顺序,对列表中的重复数据不去重。
LinkList链式列表有序的,add的顺序就是print的顺序,对列表中的重复数据不去重。
Set
实现HashSet,所元素放在set中,就可以实现去重。
集合可以去重,输出无序的。
//上面是一个arrayList,因为List和Set都有一个共同接口Collection
//new Set的实现类HashSet,把列表作为参数。
Set<Integer> mysets=new HashSet<Integer>(arrs);
System.out.println(mysets);
集合去重的原理:
HashSet去重底层调用HashMap,HashMap继承Map接口,Map是值对
互联网处理的信息都是值对信息,获取相关的信息
Maps的遍历方法(三种)
keySet
entrySet
迭代器
通过maps的方法
获取所有的key keyset();
获取所有的value values();
获取单个的value get(key)
获取key value值对 entrySet
HashMap底层原理.
Hash谈的哈希表,哈希算法是先算表 1>>30
在putVal算法中有指针Node(链状数据结构)
建完表tab[],数组是一个线性结构
Hash表是线性和链状结构结合的结构特点。
通过算法计算线性表的存储,当线性表出现冲突,采用链表。链表超过8个,形成一颗红黑树.
链状结构采用红黑树
二叉树
红黑树
树结点: 6
8个结点就是红黑树
static final int TREEIFY_THRESHOLD = 8;
/**
* The bin count threshold for untreeifying a (split) bin during a
* resize operation. Should be less than TREEIFY_THRESHOLD, and at
* most 6 to mesh with shrinkage detection under removal.
*/
树结构结点阈值是6
static final int UNTREEIFY_THRESHOLD = 6;
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
HashMap最开始的容量空间是16
代码在码云Gitee,有需要的小伙伴可自取哦: