JAVA基础
文章平均质量分 83
咖啡不甜不好喝
这个作者很懒,什么都没留下…
展开
-
11、队列
队列在日常工作中使用的没有集合多,但是同样特别重要,我们平时使用到的线程池、读写锁、消息队列等等技术和框架,底层原理都是队列J,队列是很多高级 API 的基础,学好队列,对自己深入 Java 学习非常重要。AVA中常用的队列有LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue、DelayQueue,下面简单介绍下这四种队列各种的特别以及应用场景。本文只做队列的入门级学习,不具体研究源码。Queue接口Queue接口是队列最基础的接口,基本所有的原创 2022-02-28 21:58:56 · 385 阅读 · 0 评论 -
10、并发集合类
ArrayList、LinkedList等List类集合,以及HashMap、TreeMap、LinkedHashMap等Map类集合,都是线程不安全的,当作为共享变量时,在多线程并发环境下存在线程安全问题,为此,JAVA提供了线程安全的集合,List类集合有Vector、Collections.synchronizedList、CopyOnWriteArrayList,Map类集合有Hashtable、Collections.synchronizedMap、ConcurrentHashMap。List类原创 2022-02-26 23:39:24 · 241 阅读 · 0 评论 -
10、并发集合类
ArrayList、LinkedList等List类集合,以及HashMap、TreeMap、LinkedHashMap等Map类集合,都是线程不安全的,当作为共享变量时,在多线程并发环境下存在线程安全问题,为此,JAVA提供了线程安全的集合,List类集合有Vector、Collections.synchronizedList、CopyOnWriteArrayList,Map类集合有Hashtable、Collections.synchronizedMap、ConcurrentHashMap。List类原创 2022-02-24 23:22:59 · 737 阅读 · 0 评论 -
09、HashSet、TreeSet、LinkedHashSet 源码解析
Set类集合通过组合不同的Map,实现各种Set的功能,HashSet组合的是HashMap,TreeSet组合的是TreeMap,而LinkedHashSet则是继承HashSet,HashSet和TreeSet之所以采用组合而不是继承的方式,是因为:继承表示父子类是同一个事物,而 Set 和 Map 本来就是想表达两种事物,所以继承不妥,而且 Java 语法限制,子类只能继承一个父类,使用继承后续难以扩展;组合更加灵活,可以任意的组合现有的基础类,并且可以在基础类方法的基础上进行扩展、编排等,而且原创 2022-02-19 00:39:02 · 211 阅读 · 0 评论 -
08、Map源码面试题
1、 Map 数据结构类问题1、 说一说 HashMap 底层数据结构HashMap的底层数据结构是数组+链表+红黑树,之所以采用这种结构,是因为数组通过下标查询的速度很快,方便快速查找,时间复杂度是O(1),数组的默认大小是16;当向HashMap中put()元素时,会先根据key计算数组的下标index(计算方式是(n-1) & hash,n是数组的长度,hash是key的hashcode),通过index获取数组的值,如果值不为null就说明hash冲突了,会接着寻找以该数组元素为头节点原创 2022-02-18 23:23:56 · 285 阅读 · 0 评论 -
07、集合之TreeMap和LinkedHashMap
07、集合之TreeMap和LinkedHashMapTreeMapTreeMap的底层数据接口是红黑树,由于红黑树的左小右大的特性,所以TreeMap中的元素会自动根据key进行排序,在初始化TreeMap时,可以传自定义的排序器comparator,如果没有传排序器会默认使用key的compareTo()方法进行比较。因为底层使用的时红黑树,所以TreeMap的get()、put()、remove()方法的时间复杂度都是O(log(n))。排序的两种方式实现comparable接口,通过com原创 2022-02-17 22:03:20 · 574 阅读 · 0 评论 -
06、集合之HashMap
06、集合之HashMapJDK7与JDK8 HashMap的比较HashMap的结构?链表与红黑树之间的转换?为什么是6和8(跳过7是为了避免链表和红黑树之间的频繁切换)扩容的细节?扩容之后数据的迁移?https://blog.csdn.net/Lammonpeter/article/details/104271481?spm=1001.2014.3001.5501...原创 2022-02-17 22:02:52 · 152 阅读 · 0 评论 -
05、List常见面试题
1、说说你自己对 ArrayList 的理解?很多面试官喜欢这样子开头,考察对 ArrayList 有没有总结经验,介于 ArrayList 内容很多,建议先回答总体架构,再从某个细节出发作为突破口,比如这样:ArrayList 底层数据结构是个数组,其 API 都做了一层对数组底层访问的封装,比如说 add 方法的过程是……(这里可以引用我们在 ArrayList 源码解析中 add 的过程)。一般面试官看你回答得井井有条,并且没啥漏洞的话,基本就不会深究了,这样面试的主动权就掌握在自己手里面了,如原创 2022-02-13 12:34:59 · 263 阅读 · 0 评论 -
01、String、Long源码解析
String1、不变性不变性指的是值一旦被初始化,就不能再被改变,如果值被修改了,就会生成新的类,内存的物理地址会被改变。String之所以具有不变性的原因:String类被final修饰,所有String类不能被继承,也就是说任何对String的操作方法都不会被继承覆写;String中保存数据的是一个char类型的数组,该数组也被final修饰了,也就是说一旦给String变量赋值了,内存地址是绝对无法再被修改的,而且该数组被private修饰,外部无法访问到该数组变量,只能通过String类原创 2022-02-07 21:15:14 · 430 阅读 · 0 评论 -
02、Java常用关键字
static关键字static意思是静态的、全局的,一旦被修饰,说明被修饰的东西在一定范围内是共享的,谁都可以访问,这时候需要注意并发读写的问题。1、修饰的对象static可以修饰成员变量、方法和代码块。修饰成员变量当static修饰成员变量时,如果该变量是public,表示该变量任何类都可以直接访问,无需初始化类,直接使用类名的方式就可以访问。这时候要特别注意线程安全的问题,当多个线程同时对共享变量进行读写时,很有可能出现并发问题,如我们定义了public static List<St原创 2022-02-09 17:38:59 · 534 阅读 · 0 评论 -
04、集合之LinkedList
底层架构LinkedList底层数据架构是双向链表,整体架构如下图所示:从架构图可以得知:链表中的每个元素节点叫Node,每个Node由prev、item、next三部分组成,item中存放元素的值,prev指向前一个节点,next指向后一个节点;LinkedList中有两个成员变量first和last,first指向头节点,last指向尾节点,如果LinkedList为空,first和last都指向null;头节点的prev指向null,尾节点的next也指向null;因为是双向链表,理论原创 2022-02-12 22:46:21 · 310 阅读 · 0 评论 -
03、集合之ArrayList
ArrayList的底层数据结构是数组,数组的默认长度是10。需要注意的是,当使用new ArrayList()的方式创建了ArrayList集合时,数组的长度为0,只有当调用了add()方法后,数组的长度才会变成默认长度10。基本概念ArrayList中有几个非常重要的成员变量需要我们注意下,①elementData 是真正用于存储数据的数组;②DEFAULT_CAPACITY 表示数组的初始大小,默认是 10;③size 表示当前数组中的元素数量,类型 int,没有使用 volatile原创 2022-02-12 00:42:18 · 1403 阅读 · 0 评论