集合元素在内存中的存储机制!!!!!!!
hashmap的hash存储机制,treemap的红黑树存储机制,hashset的底层就是hashmap,treeset的底层就是treemap,arraylist数组存储机制,linkedlist链表存储机制,
map-------entry----hashmap/hashset treemap/treeset
hashmap使用hash表+链表来存储关联数组,hashmap中有一个内部类Entry(key-value),hash表+链表存储的就是一个个entry实例,将所有的entry实例的value置为null,则hashmap变为hashset。存储entry实例时,只是根据key的hashcode值来决定存储位置。hash表的桶中存放的是Entry实例啊,当hashmap的每个桶中之存储一个entry时,即没有通过指针产生Entry链时,hashmap具有最好的性能。在发生hash冲突时,单个bucket中存储的时一个entry链,。
hashset的实现只是封装了一个hashmap对象来存储所有的集合元素,所有放入hashset中的元素实际上都是由hashmap的key来保存,而hashmap的value只是存储了一个静态的Object对象
hashmap底层
hashmap在底层使用key-value对当成一个整体进行处理,这个整体就是一个entry对象,hashmap底层使用一个entry数组来保存所有的key-value对,当需要存储一个entry对象时,会根据hash算法来决定其存储位置,当需要取出一个entry时,也会根据hash算法来找到其存储位置,
当创建hashmap时,有一个默认的负载因子,默认值为0.75,。负载因子是时间和空间上的折中,负载因子大,则hash表占内存空间小,查询时间大,负载因子小,则hash表占内存空间大,查询时间小,
------------------------------------
treemap,每个entry都被当成一个红黑树节点来对待,,treemap中的所有entry总是按key的排列顺序来保持有序状态,
红黑树==自平衡二叉查找树
list-----arraylist/linkedlist/vector/stack
arraylist底层用数组实现存储,线程不安全
linkedlist底层使用双向链表来实现存储,线程不安全
vector/stack底层用数组实现存储,,线程安全