java基础
文章平均质量分 85
lzz0729
这个作者很懒,什么都没留下…
展开
-
java容器类:HashMap
实现原理内部组成HashMap内部主要有以下几个主要的实例变量:1234transient Node<K,V>[] table;transient int size;int threshold;final float loadFactor;size表示实际键的个数。table是一个Node类型的数组,其中每个元素指向一个单向链表,链表中的每个节点表示一个键值对,Node是一个内部类,它...原创 2018-05-17 14:08:31 · 183 阅读 · 0 评论 -
java:线程本地变量ThreadLocal
基本概念线程本地变量是说,每个线程都有同一个变量的独有拷贝,它们访问的虽然是同一个变量,但每个线程都有自己的独立的值,这就是线程本地变量的含义。使用场景DateFormat/SimpleDateFormatThreadLocal是实现线程安全的一种方案,比如对于DateFormat/SimpleDateFormat,日期和时间操作是非线程安全的,实现安全的一种方式是使用锁,另一种方式是每次都创建一...转载 2018-05-17 15:13:26 · 445 阅读 · 0 评论 -
java:反射
反射,是在运行时,而非编译时,动态获取类型的信息。比如接口信息、成员信息、方法信息、构造方法信息等,根据这些动态获取到的信息来创建对象、访问/修改成员、调用方法等。慎用反射反射虽然是灵活的,但一般情况下,并不是我们优先建议的,主要原因是:反射更容易出现运行时错误,使用显式的类和接口,编译器能帮我们做类型检查,减少错误,但使用反射,类型是运行时才知道的,编译器无能为力反射的性能要低一些,在访问字段、...原创 2018-05-18 14:51:40 · 103 阅读 · 0 评论 -
动态代理
动态代理是一种强大的功能,它可以在运行时动态创建一个类,实现一个或多个接口,可以在不修改原有类的基础上动态为通过该类获取的对象添加方法、修改行为,这些特性使得它广泛应用于各种系统程序、框架和库中,比如Spring, Hibernate, MyBatis, Guice等。动态代理是实现面向切面的编程(AOP - Aspect Oriented Programming)的基础,切面的例子有日志、性能监...原创 2018-05-18 14:51:36 · 138 阅读 · 0 评论 -
java抽象类
抽象类Nov 18, 2017 | Java基础文章目录抽象方法和抽象类为什么要抽象类抽象类和接口原文链接抽象是相对于具体而言的,具体类有直接对应的对象,而抽象类没有,一般而言是比较上层的夫类。比如说,动物是抽象,而狗是具体对象;水果是抽象,苹果是具体对象;图形是抽象,圆是具体对象。抽象方法和抽象类有一个图形类Shape,它有一个方法draw()。Shape其实就是一个抽象概念,它的draw方法并...原创 2018-05-18 14:51:32 · 3637 阅读 · 0 评论 -
java类加载机制
类加载器ClassLoader就是加载其他类的类,它负责将字节码文件加载到内存,创建Class对象。与之前介绍的反射、注解、和动态代理一样,在大部分的应用编程中,我们不太需要自己实现ClassLoader。不过,理解类加载的机制和过程,有助于我们更好的理解之前介绍的内容,更好的理解Java。在反射一节,我们介绍过Class的静态方法Class.forName,理解类加载器有助于我们更好的理解该方法...转载 2018-05-18 14:51:28 · 138 阅读 · 0 评论 -
红黑树学习
黑树本质上是一种二叉查找树,但它在二叉查找树的基础上额外添加了一个标记(颜色),同时具有一定的规则。这些规则使红黑树保证了一种平衡,插入、删除、查找的最坏时间复杂度都为 O(logn)。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。比如在 Java 集合框架中,很多部分(HashMap, TreeMap, TreeSet 等)都有红黑树的应用,这些集合均提供了很好的性能...原创 2018-05-18 14:52:30 · 160 阅读 · 0 评论 -
java:线程池
线程池,顾名思义,就是一个线程的池子,里面有若干线程,它们的目的就是执行提交给线程池的任务,执行完一个任务后不会退出,而是继续等待或执行新任务。线程池主要由两个概念组成,一个是任务队列,另一个是工作者线程,工作者线程主体就是一个循环,循环从队列中接受任务并执行,任务队列保存待执行的任务。线程池的优点是显而易见的:它可以重用线程,避免线程创建的开销在任务过多时,通过排队避免创建过多线程,减少系统资源...原创 2018-05-17 14:53:06 · 115 阅读 · 0 评论 -
java:多线程
线程与进程线程是一个轻量级的子进程,线程类属于java.lang.包。是利用机器多个cpu的一种方式。例如 一个任务用一个线程需要100毫秒完成,那么可以使用10个线程让时间减少到10毫秒。一个进程可以有多个线程。线程可以执行进程的任何部分。进程的同个部分可以由多个线程执行。进程有自己的地址,由进程创建的线程可以共享进程的地址空间。线程在进程中有自己的堆栈,所有线程共享一个常见的系统资源,如堆内存...原创 2018-05-17 14:38:24 · 255 阅读 · 0 评论 -
java设计模式
开闭原则(1)对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。(2)对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.E...转载 2018-05-18 14:52:19 · 204 阅读 · 0 评论 -
java容器类:LinkedList
ArrayList随机访问效率很高,但插入和删除性能比较低,我们提到了同样实现了List接口的LinkedList,它的特点与ArrayList几乎正好相反,本节我们就来详细介绍LinkedList。实现原理内部组成我们知道,ArrayList内部是数组,元素在内存是连续存放的,但LinkedList不是。LinkedList直译就是链表,确切的说,它的内部实现是双向链表,每个元素在内存都是单独存...原创 2018-05-17 14:19:00 · 152 阅读 · 0 评论 -
java容器类:ArrayList
基本原理内部组成可以看出,ArrayList的基本用法是比较简单的,它的基本原理也是比较简单的,内部有一个数组elementData,一般会有一些预留的空间,有一个整数size记录实际的元素个数,如下所示:12transient Object[] elementData;private int size;我们暂时可以忽略transient这个关键字。各种public方法内部操作的基本都是这个数组和...原创 2018-05-17 14:13:44 · 227 阅读 · 0 评论 -
StringBuilder和StringBuffer
这两个类的方法基本是完全一样的,他们的实现代码也几乎一样,唯一不同的在于StringBuffer是线程安全的,而StringBuilder不是。下文讨论StringBuilder。基本实现原理与String类似,StringBuilder类也封装了一个字符数组,定义如下:char[] value;与String不同,它不是final的,可以修改。另外,与String不同,字符数组中不一定所有位置都...转载 2018-05-18 14:51:43 · 113 阅读 · 0 评论