jdk基础
文章平均质量分 91
菜鸡小王子
这个作者很懒,什么都没留下…
展开
-
HashMap的jdk1.8分析
HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。转载 2017-07-11 17:41:22 · 246 阅读 · 0 评论 -
ArrayList和LinkedList区别
1.ArrayList是实现了基于动态数组(Object[])的数据结构,LinkedList基于链表的数据结构(Node)。 2.ArrayList初始长度为10,扩容后为1.5*oldCapacity。3.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间(扩容后可调用trimTosize),而LinkedList的空间花费则体现在它的每一个元素都需要原创 2017-08-28 16:02:20 · 309 阅读 · 0 评论 -
缓存淘汰算法--LRU算法
1. LRU1.1. 原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2. 实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3. 当链转载 2017-08-28 20:32:06 · 313 阅读 · 0 评论 -
一致性哈希算法与Java实现
一致性哈希算法与Java实现========================================================一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所转载 2017-08-30 15:52:53 · 332 阅读 · 0 评论 -
Java四种引用类型
强引用:当内存不够时,宁愿抛出OutOfMemoryError错误,也不会去回收。Object object = new Object();String str = "hello";显示的置null或者脱离其作用域范围,不存在任何引用时即可以被回收。应用:ArrayList源码:remove+clear public E remove(int index) {原创 2017-09-16 21:49:20 · 280 阅读 · 0 评论 -
枚举的使用和原理
枚举,enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。语法:创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 prote原创 2017-08-31 16:11:13 · 363 阅读 · 0 评论 -
Iterator原理(jdk1.8)
Iterator用于遍历集合中的元素,适用于不知道集合内部结构的情况。用户不再与集合类交互,而是与Iterator交互,其清楚知道集合类的内部状态,通过控制iterator达到遍历集合的目的。Iterator接口:public interface Iterator { boolean hasNext(); E next(); default void remov原创 2017-09-18 22:26:50 · 1121 阅读 · 0 评论 -
JAVA创建对象的四种方式
1.new对象2.调用对象的clone方法(此对象需要实现Cloneable接口,在clone方法中调用super.clone()方法)这里需要注意两点:(1)浅拷贝和深拷贝的区别:请看我的博客Java的浅度克隆和深度克隆(2)原型模式的概念、有点、使用场景:请看转载博客3.运用反射手段:MyObject object = (MyObject) Class.forNam原创 2017-09-11 09:36:55 · 260 阅读 · 0 评论 -
String s = new String("xyz")创建了多少个String实例 真相大揭幕
看的一个帖子,真特么底层,现在拿过来瞻仰一下:源地址:http://www.iteye.com/topic/774673楼主要注意了:这题或类似的题虽然经常见,但使用这个描述方式实际上没有任何意义:问题:String s = new String("xyz"); 创建了几个String Object?(2个不准确)这个问题自身就没有合理的答案,楼主所引用的“标转载 2017-09-11 15:19:59 · 754 阅读 · 0 评论 -
HashMap和Hashtable的详细区别
HashMap和Hashtable的区别两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全。Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些,我们平时使用时若无特殊需求建议使用HashMap,在多线程环境下若使用HashMap需要使用Collections.synchronizedMap()方法原创 2017-07-05 22:14:38 · 40461 阅读 · 4 评论 -
Collection 和Collections 的区别/Collections常用方法
Collection 是集合类的上级接口,子接口主要有Set 和List。Collections 是针对集合类的一个帮助类,提供了操作集合的工具方法:一系列静态方法,实现对各种集合的搜索、排序、线程安全化等操作。Collections常用方法:sort 排序:public static > void sort(List list)public static void原创 2017-09-11 18:41:57 · 482 阅读 · 0 评论 -
String和StringBuilder作为方法参数的区别
String作为方法参数:public class StringTest { public static void main(String[] args) { String s1 = new String("string"); change(s1); System.out.println(s1); } public sta原创 2017-09-11 22:34:53 · 725 阅读 · 0 评论 -
BigDecimal用法详解
一、BigDecimal介绍 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中若需要精确的计算结果则要用java.math.BigDecimal转载 2017-09-19 22:58:56 · 657 阅读 · 0 评论 -
Integer和int的区别
Integer和int的区别原创 2017-07-11 20:10:02 · 670 阅读 · 0 评论 -
类加载顺序
静态变量、静态块、构造块、构造函数执行顺序先看一个demo:Parent类:/** * Created by flh on 2017/8/20. */public class Parent { Parent(){ System.out.println("我是父类构造函数"); } static { System.out.pr原创 2017-08-20 23:01:30 · 233 阅读 · 0 评论 -
序列化与反序列化
定义把Java 对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为Java 对象的过程称为对象的反序列化。应用场景(1)实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里)(2)利用序列化实现远程通信,即在网络上传送对象的字节序列。实现方式所有实现序列化的类都必须实现Serializable 接口,它是一种标记接口,里面没有任何方法。当原创 2017-09-12 15:34:45 · 217 阅读 · 0 评论 -
反射如何破坏单例模式
一个单例类:public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance;转载 2017-09-20 18:12:35 · 604 阅读 · 2 评论 -
Java finally语句到底是在return之前还是之后执行?
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的:(1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被转载 2017-09-12 22:13:42 · 215 阅读 · 0 评论 -
JAVA反射机制详解
关于JAVA反射我觉得是我看过的写的最好一篇博客,地址:https://www.daidingkang.cc/2017/07/18/java-reflection-annotations/前言现在在我们构建自己或公司的项目中,或多或少都会依赖几个流行比较屌的第三方库,比如:Butter Knife、Retrofit 2、Dagger 2、GreenDao等,如果你没用过,那你需要找时间转载 2017-09-13 22:51:30 · 293 阅读 · 0 评论 -
jdk1.8的新特性
jdk1.8的新特性原创 2017-07-11 21:23:56 · 418 阅读 · 0 评论 -
Java内存溢出异常(OOM)完全指南
本文分析什么情况会导致OOM出现,提供示例代码的同时为您提供解决指南。转载 2017-07-13 19:21:37 · 454 阅读 · 0 评论 -
java集合类
List和Set实现Collection接口,Set无序,不重复,List有序,可重复。 Map键值对,键唯一,值不唯一。 List: 1. Vector 线程安全,Stack继承于Vector 2. ArrayList 线程不安全 3. LinkedList 线程不安全Set: 1. HashSet 2. LinkedHashSet 3. TreeSetMap: 1. Hash原创 2017-07-08 10:09:00 · 325 阅读 · 0 评论 -
synchronized修饰静态方法和普通方法有什么区别
在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法。也可以synchronized来修饰方法里面的一个语句块。 在static方法前加synchronizedstatic:静态方法属于类方法,它属于这个类,获取到的锁,是属于类的锁。 在普通方法前加synchronizedstatic:非static方法获取到的锁,是属于当前对象的锁。原创 2017-07-08 16:51:39 · 13213 阅读 · 0 评论 -
单例模式
单例模式原创 2017-07-23 14:50:25 · 234 阅读 · 0 评论 -
Java线程池源码解析(ThreadPoolExecutor)
转载地址:深入理解java线程池—ThreadPoolExecutor几句闲扯:首先,我想说java的线程池真的是很绕,以前一直都感觉新建几个线程一直不退出到底是怎么实现的,也就有了后来学习ThreadPoolExecutor源码。学习源码的过程中,最恶心的其实就是几种状态的转换了,这也是ThreadPoolExecutor的核心。花了将近小一周才大致的弄明白ThreadPoolExec...转载 2017-08-08 20:03:04 · 496 阅读 · 0 评论 -
Java线程池ThreadPoolExecutor小结
Java语言为我们提供了两种基础线程池的选择:ScheduledThreadPoolExecutor和ThreadPoolExecutor。它们都实现了ExecutorService接口(注意,ExecutorService接口本身和“线程池”并没有直接关系,它的定义更接近“执行器”,而“使用线程管理的方式进行实现”只是其中的一种实现方式)。这篇文章中,我们主要围绕ThreadPoolExecutor类进行讲解。原创 2017-08-08 21:23:23 · 297 阅读 · 0 评论 -
Java的浅度克隆和深度克隆
前言:protected native Object clone() throws CloneNotSupportedException;方法由protected修饰,只能由子类重写和调用,而且为本地方法。Object提供clone方法,生成对象的一个副本,来实现对象的一次浅度克隆。但是对象的引用类型不会拷贝一份,引用地址与原对象相同。实现对象的克隆需要实现Cloneable接口,原创 2017-08-10 09:36:16 · 508 阅读 · 0 评论 -
Object常见方法
protected Object clone() 创建并返回此对象的一个副本。(浅度克隆)boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。重写equals方法都需要重写hashCode方法protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时(该对象不可达),由对象的垃圾回收器调用此方法。原创 2017-08-10 15:51:37 · 202 阅读 · 0 评论 -
Java抽象类和接口的区别
Abstract classInterface实例化不能不能类一种继承关系,一个类只能使用一次继承关系。可以通过继承多个接口实现多重继承一个类可以实现多个interface方法可以有私有的,非abstract的方法,可以没有abstract方法,如果abstrac原创 2017-08-10 22:22:17 · 182 阅读 · 0 评论 -
Java序列化机制
转载出自于:JAVA序列化机制的深入研究1、java序列化简介序列化就是指对象通过写出描述自己状态的数值来记录自己的过程,即将对象表示成一系列有序字节,Java提供了将对象写入流和从流中恢复对象的方法。对象能包含其它的对象,而其它的对象又可以包含另外的对象。JAVA序列化能够自动的处理嵌套的对象。对于一个对象的简单域,writeObject()直接将其值写入流中。当遇到一个对象域时,w转载 2017-08-18 09:40:29 · 283 阅读 · 0 评论 -
重载和重写的底层实现
重载:先看个例子public class StaticDispatch { static abstract class Human{ } static class Man extends Human{ } static class Woman extends Human{ } public void sayHello(Hu原创 2017-08-11 11:22:13 · 1213 阅读 · 0 评论 -
重写equals方法时必须重写hashCode方法的理由
equals方法和hashCode方法都是Object类的方法,在Object类中的equals方法是直接用“==”来比较的,而“==”比较得是引用的地址是否相等,如一个类A的两个实例b、c,在使用b.equals(c)时他比较得是b、c这两个引用的地址(他们是不是指向同一个对象)而不是引用所指向的对象内容,而hashCode方法则是返回该对象的哈希码值,也就是对象在内存中的实际地址值(对象所占内原创 2017-08-18 14:56:33 · 348 阅读 · 0 评论 -
Java内存模型(JMM)
Java内存模型: Java内存模型的主要目标:定义在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。原创 2017-07-07 16:32:23 · 282 阅读 · 0 评论 -
四种处理散列冲突的方法
开放定址法:当冲突发生时,使用某种探测技术在散列表中形成一个探测序列。沿此序列逐个单元地查找,直到碰到一个开放的地址(即该地址单元为空)为止,然后插入。 基本公式:fi(key) = (f(key)+di) MOD m (di=1,2,3,......,m-1),di可视情况改变。再散列函数法:多个散列函数链地址法(拉链法):相同地址用链表公原创 2017-08-22 11:07:22 · 2624 阅读 · 0 评论 -
map按key和value排序
TreeMap:默认按照key升序进行排序public static void main(String[] args) { TreeMap<String, Integer> map = new TreeMap<>(); map.put("b", 123); map.put("c", 24); map.put("a", 56);原创 2017-08-15 22:28:45 · 261 阅读 · 0 评论 -
Collections.synchronizedMap(map)
Collections中有个私有静态方法synchronizedMap,返回一个 线程安全的SynchronizedMap类。定义如下:public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) { return new SynchronizedMap<K,V>(m); }SynchronizedMap类定义:private s原创 2017-07-07 00:26:51 · 1308 阅读 · 0 评论 -
Error与Exception结构
先看一下类的结构图:Throwable是所有错误或异常的超类两个子类:1、Error:发生在JVM层次的错误,无法捕捉,只能显示错误。2、Exception:可恢复,可捕捉的异常(1)运行时异常RuntimeException:编译器不会检查,编译仍能通过,比如数组越界异常IndexOutOfBoundsException,除数为0的异常ArithmeticExcept原创 2017-08-10 20:23:29 · 687 阅读 · 0 评论