Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

java基础面试 PDF 下载


分享到:
时间:2021-06-15 10:22来源:http://www.java1234.com 作者:转载  侵权举报
java基础面试 PDF 下载
失效链接处理
java基础面试 PDF 下载


本站整理下载:
提取码:rgtf 
 
相关截图:
 
主要内容:


通用实现
  Iterable(接口)接口是java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素
├Collection(接口)
├List列表(接口)有序的 collection(也称为序列),允许重复的元素
 │├LinkedList(实现类)使用双向链表实现存储,允许所有元素(包括 null)。非线程安全,要保证同步,可以使用List list = Collections.synchronizedList(new LinkedList());进行包装,可以被当作堆栈和队列来使用。(双向链表不能用单向链表替代,因为单项链表是无序的无法保证LinkedList的有序性)
│├ArrayList (实现类) 底层使用的是数组结构,特点:查询速度快,增删操作较慢,而且线程不同步.要保证同步,可以使用:List list = Collections.synchronizedList(new ArrayList());进行包装,默认容量为10.常用方法:add,addAll,remove,indexOf,subList,contains,isEmpty…. 初始容量定义:10 扩容:oldCapacity + (oldCapacity >> 1),即原集合长度的1.5倍。
 │└Vector也是一个有序集合,允许重复元素,底层动态分配的Object[]数组实现并且线程安全. 初始容量定义:10 扩容:如果扩容因子>0 oldCapacity + 扩容因子,否则按照oldCapacity*2 进行扩容
 │ └Stack(派生类) Stack是继承于Vector的子类,它主要用来模拟”栈“,因此也具备了peek()、pop()、push()等主要用于栈操作的方法,性能不行。ArrayDeque可以代替
 └Set集(接口) Set是一种没有重复元素的集合,它所有的方法都是直接继承自Collection接口,并且添加了一个对重复元素的限制.Set要求强化了equals和hashCode两个方法,以使Set集合可以对元素进行排序和对比.
(SortedSet和NavigableSet接口)
     通用实现
├HashSet通过哈希表存储元素,它是Set通用类中性能最好的一个,但不保证元素的排序 默认容量 和扩容机制和hashmap一致。
├TreeSet 元素按一定规则排序,所以他的性能要比HashSet差许多.
└LinkedHashSet在HashSet的基础上,增添了一个链表结构,来保证数据的按插入先后存储有序,因为需要维持一个链表,所以它的性能比HashSet稍微差一点,介于HashSet和TreeSet之间.
专用实现
├EnumSet是一个高性能的枚举类型的Set实现类,其内部元素必须都是相同的枚举类型.
└CopyOnWriteArraySet是一个支持COW(copy-on-write)机制的集合.CopyOnWriteArraySet对集合的任何修改操作如,add,remove,set时,都会先复制一份,所以在CopyOnWriteArraySet可以安全的并发进行迭代和元素插入删除操作,不需要同步锁,实现了读写分离,但是读操作不具备实时性.CopyOnWriteArraySet只适用集合频繁迭代但很少修改的情景.
 
Map 映射Map是一个包含键值对的集合,一个map不能有重复的键(key),而且每个键至多只能对应一个值.Map同Collection一样,它的所有通用实现都会提供一个转换器构造函数,接收一个Map类型集合,并以此初始化自己,这样只要是Map的实现都可以相互之间转换.
(SortedMap和NavigableMap两个接口)
通用实现
├HashMap 是线程不安全的实现,且HashMap中可以使用null作为key或者value。
      1、 默认分配到空间是16=2^4 。2、手动为hashmap分配空间的时候 a:空间大小要为2的次幂(可以减少hash冲突,避免一些数组空间永远不被使用)b:0.75*size > 实际要存储的元素个数 3、hashmap 会在元素个数达到size*0.75(默人loadFactor)进行扩容。4、扩容的时候旧数组的长度左移一位。
├LinkedHashMap使用一个双向链表来维护key-value对的次序,其也是一个有序的Map集合,顺序与key-value对的插入顺序保持一致
├TreeMap是一个红黑树的结构,每个key-value作为红黑树的一个节点。TreeMap也会对key进行排序,也分为自然排序和定制排序两种
├Hashtable是一个比较古老的Map实现类,它是一个线程安全的Map实现,且不允许使用null作为key和value。由于该类是比较久远的类,其性能较低,所以现在用的也比较少
HashTable中hash数组默认大小是11,增加的方式是 old*2+1。

 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐