
Java
西湖有大葱
这个作者很懒,什么都没留下…
展开
-
Java资料总结(全)
Java内存模型JMMJVM垃圾收集(Garbage Collector,GC)Java对象的生命周期线程Java多线程同步(锁)的实现方法(synchronised 与reentrantlock)java锁的种类及研究Java的容器 List、Set、Map的区别HashMapvs.TreeMap vs. Hashtable vs. LinkedHashMap原创 2016-11-08 15:22:40 · 1255 阅读 · 0 评论 -
HashMap的实现原理
1.HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。2.HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。原创 2016-11-05 11:37:02 · 851 阅读 · 0 评论 -
HashSet,TreeSet和LinkedHashSet的区别
|——SortedSet接口——TreeSet实现类 Set接口——|——HashSet实现类 |——LinkedHashSet实现类Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,原创 2016-11-05 11:18:27 · 669 阅读 · 0 评论 -
HashMapvs.TreeMap vs. Hashtable vs. LinkedHashMap
Map是最重要的数据结构。这篇文章中,我会带你们看看HashMap, TreeMap, HashTable和LinkedHashMap的区别。Map概览Java SE中有四种常见的Map实现——HashMap, TreeMap, Hashtable和LinkedHashMap。如果我们使用一句话来分别概括它们的特点,就是:HashMap就是一张hash表,键和值都没有排序。Tree原创 2016-11-05 11:06:34 · 512 阅读 · 0 评论 -
Java的容器 List、Set、Map的区别
在编程中,常常需要集中存放多个数据。从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量。一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的,如果我们需要保存一个可以动态增长的数据(在编译时无法确定具体的数量),java的集合类就是一个很好的设计方案了。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所以的集合类都位于java.原创 2016-11-04 23:11:52 · 1906 阅读 · 0 评论 -
java锁的种类及研究
Java锁的种类以及辨析 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如synchronized 和ReentrantLock等等) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA中常见的锁以及其特性,为大家答疑解惑。1、自旋锁2、自旋锁的其他种类3、阻塞锁4、可重入锁5、读写锁6、原创 2016-11-04 22:23:55 · 934 阅读 · 0 评论 -
Java多线程同步(锁)的实现方法(synchronised 与reentrantlock)
synchronisedsynchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3. 修改一个静态的方法,其作用的范原创 2016-11-04 12:02:30 · 3614 阅读 · 1 评论 -
线程
1.线程和线程池1.1线程类创建的两种方法://方法一:继承Thread 类,实现run方法。class ThreadTest extends Thread {ThreadTest() {}public void run() {// code here ... }}//创建并启动一个线程: ThreadTest t = new ThreadTest();t.star原创 2016-11-04 11:34:37 · 1122 阅读 · 0 评论 -
Java对象的生命周期
在Java中,对象的生命周期包括以下几个阶段:1.创建阶段(Created)2.应用阶段(In Use)3.不可见阶段(Invisible)4.不可达阶段(Unreachable)5.收集阶段(Collected)6.终结阶段(Finalized)7.对象空间重分配阶段(De-allocated)1.创建阶段(Created)在创建阶段系统通过下原创 2016-11-04 11:12:35 · 845 阅读 · 0 评论 -
垃圾收集(Garbage Collector,GC)
Java的内存分布在JVM中,内存是按照分代进行组织的。其中,堆内存分为年轻代和年老代,非堆内存主要是Permanent区域,主要用于存储一些类的元数据,常量池等信息。而年轻代又分为两种,一种是Eden区域,另外一种是两个大小对等的Survivor区域。之所以将Java内存按照分代进行组织,主要是基于这样一个“弱假设” - 大多数对象都在年轻时候死亡。同时,将内存按照分原创 2016-11-04 11:02:18 · 1570 阅读 · 0 评论 -
JVM
生命周期 知识点总结:java虚拟机的生命周期,当一个java应用main函数启动时虚拟机也同时被启动,而只有当在虚拟机实例中的所有非守护进程都结束时,java虚拟机实例才结束生命。 一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果同一台计算机上同时运行三个Java程原创 2016-11-03 23:21:25 · 947 阅读 · 0 评论 -
Java 内存模型JMM
参考:java内存模型JMM(Java memory model):通俗地讲,就是描述Java中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节。结合上图,先介绍几个概念:主内存:保存了所有的变量。共享变量:如果一个变量被多个线程使用,那么这个变量会在每个线程的工作内存中保有一个副本,这种变量就是共享变量。工作内原创 2016-11-03 23:04:12 · 973 阅读 · 0 评论 -
Java多线程同步与synchronized
为什么需要同步多线程?线程的同步是指让多个运行的线程在一起良好地协作,达到让多线程按要求合理地占用释放资源。我们采用Java中的同步代码块和同步方法达到这样的目的。比如这样的解决多线程无固定序执行的问题:public class TwoThreadTest { public static void main(String[] args) { Thre转载 2015-11-20 20:23:14 · 618 阅读 · 0 评论 -
LRU缓存实现(Java)
LRU Cache的LinkedHashMap实现LRU Cache的链表+HashMap实现LinkedHashMap的FIFO实现调用示例LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,比如我们缓存10000条数据,当数据小于10000转载 2015-11-20 16:02:18 · 460 阅读 · 0 评论 -
Hashtable原理解析
有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值。一个是前面提到的HashMap,还有一个就是马上要讲解的HashTable。对于HashTable而言,它在很大程度上和HashMap的实现差不多,如果我们对HashMap比较了解的话,对Has转载 2015-11-19 23:09:52 · 492 阅读 · 0 评论 -
HashTable实现原理
有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值。一个是前面提到的HashMap,还有一个就是马上要讲解的HashTable。对于HashTable而言,它在很大程度上和HashMap的实现差不多,如果我们对HashMap比较了解的话,对Has原创 2016-11-05 12:00:56 · 4377 阅读 · 0 评论 -
ConcurrentHashMap
线程不安全的HashMap因为多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap效率低下的HashTable容器HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他线程访问HashTa原创 2016-11-05 12:17:07 · 789 阅读 · 0 评论 -
LinkedHashMap实现原理
1.LinkedHashMap 概述HashMap 是无序的,HashMap在 put的时候是根据 key的 hashcode进行 hash然后放入对应的地方。所以在按照一定顺序 put进 HashMap中,然后遍历出 HashMap的顺序跟 put的顺序不同(除非在 put的时候 key已经按照 hashcode排序号了,这种几率非常小原创 2016-11-06 10:52:51 · 1019 阅读 · 0 评论 -
内部类
参考:《疯狂的java讲义》我们把一个类放在另一个类的内部定义,这个定义在其他类内部的类成为内部类,包含内部类的类也被称为外部类。(或者叫宿主类)内部类的主要作用:• 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一包中的其他类访问该类。假设需要创建Cow类,cow类需要组合一个cowleg对象,cowleg类只有在cow类才有效,离开了cow类之后就没有任何意义。这种原创 2016-11-08 14:50:08 · 1157 阅读 · 0 评论 -
回调函数
在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就称为回调。在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃。这样的解释似乎还是比较难懂,这里举个简单的例子,程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序原创 2016-11-08 14:33:00 · 703 阅读 · 0 评论 -
多态
多态就是指一个变量, 一个方法或者一个对象可以有不同的形式.面向对象编程有三大特性:封装、继承、多态对于多态,可以总结它为: 一、使用父类类型的引用指向子类的对象; 二、该引用只能调用父类中定义的方法和变量; 三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用) 四、变量不能被重写(覆盖),”重写“的概念只针对原创 2016-11-08 14:28:27 · 564 阅读 · 0 评论 -
Java四种引用
在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。⑴强引用(StrongReference) 强引用是使用最普遍的引用。如果一个原创 2016-11-08 14:24:06 · 1095 阅读 · 0 评论 -
接口和抽象类的异同
1.抽象类在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。下面要注意一个问题:在《JAVA编程思想》一书中,将原创 2016-11-08 14:09:46 · 742 阅读 · 0 评论 -
异常处理
异常机制JAVA中把异常当做对象来处理,并定义了一个基类Throwable作为所有异常的父类Throwable类Throwable类是Java语言中所有错误或异常的超类,他有两个子类:Error与ExceptionError表示恢复是很困难的一件事,他用来表示系统错误或者低层资源的错误。Error为错误,是程序无法处理的,如OutOfMemoryError、ThreadDeat原创 2016-11-08 13:52:37 · 1008 阅读 · 0 评论 -
输入输出流 I/O
1.什么是IOJava中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 Java.io是大多数面向数据流的输入/输出类的主要软件包。此外,Java也对块传输提供支持,在核原创 2016-11-07 22:16:08 · 1143 阅读 · 0 评论 -
Java 序列化机制
Java提供一种机制叫做序列化,通过有序的格式或者字节序列持久化java对象,其中包含对象的数据,还有对象的类型,和保存在对象中的数据类型。所以,如果我们已经序列化了一个对象,那么它可以被读取并通过对象的类型和其他信息进行反序列化,并最终获取对象的原型。ObjectInputStream 和 ObjectOutputStream对象是高级别的流对象,包含序列化和反序列化的方法。 O原创 2016-11-07 21:33:05 · 864 阅读 · 0 评论 -
Java 反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们.Java反射机制主要提供了以下原创 2016-11-07 21:16:40 · 752 阅读 · 0 评论 -
类的加载和初始化顺序
类加载以及初始化的顺序是:->类的静态成员初始化分配内存(有父类的先父类,然后自己)->然后main方法执行->类初始化{类非静态成员的初始化,然后执行构造器(有父类的先给父类的非静态成员初始化,然后父类的构造器)}实例(网易实习2016):最终的输出为:3 6 7 2 1 5 4关于以下application,说法正确是什么?public cl原创 2016-11-07 21:11:13 · 946 阅读 · 0 评论 -
ClassLoader运行机制
1.类加载器1.1 ClassLoader抽象类类加载器的任务就是根据一个类的全限定名来读取此类的二进制字节流到JVM内部,然后转换为一个与目标类对应的java.lang.Class对象实例。如果需要支持类的动态加载或需要对编译后的字节码文件进行解密操作等,就需要与类加载器打交道了。(1)Bootstrap :一般用本地代码实现,负责加载 JVM 基础核心类库( rt.ja原创 2016-11-07 17:48:07 · 1806 阅读 · 0 评论 -
hashcode、equals和==之间的区别
Object类里有哪些方法1.所有方法:1. getClass()2. hashCode()3. equals()4. toString()5. clone()6. wait()...7. notify()8. notifyAll()9. finalize()Object类各个方法的作用方法摘要protected Object clone原创 2016-11-07 17:28:20 · 892 阅读 · 0 评论 -
String、StringBuffer、StringBuilder的区别
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经原创 2016-11-07 14:45:52 · 659 阅读 · 0 评论 -
LinkedHashMap源码分析与LRU实现
LinkedHashMap可认为是哈希表和链接列表综合实现,并允许使用null值和null键。LinkedHashMap实现与HashMap的不同之处在于,LinkedHashMap维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。 LinkedHashMap的实现不是同步的。如果多个线程同时访问LinkedHashMap,而其中至少一个原创 2016-11-06 11:04:06 · 3036 阅读 · 0 评论 -
LinkedHashMap 的实现原理
LinkedHashMap 概述HashMap 是无序的,HashMap 在 put 的时候是根据 key 的 hashcode 进行 hash 然后放入对应的地方。所以在按照一定顺序 put 进 HashMap 中,然后遍历出 HashMap 的顺序跟 put 的顺序不同(除非在 put 的时候 key 已经按照 hashcode 排序号了,这种几率非常小)JAVA 在 JD转载 2015-11-20 11:35:58 · 552 阅读 · 0 评论 -
HashMap的实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 2. HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本转载 2015-11-19 20:41:37 · 382 阅读 · 0 评论 -
Java集合
1.集合框架概述1.1 容器简介 1.1 容器的分类2.Collection2.1 常用方法2.2 迭代器3.List 3.1 常用方法3.2 实现原理4.Map4.1 常用方法4.2 Comparable 接口4.3 实现原理4.4 覆写hashCode()5.Set5.1 常用方法5.2 实现原理原创 2015-03-23 21:39:47 · 460 阅读 · 0 评论 -
Java 多线程
Java多线程一.线程的基本概念1.线程概述2.线程给我们带来的好处3.Java的线程模型二.Runnable接口与Thread类1.Runnable接口2.Thread类3.两种创建线程方法的比较三. 线程的控制与调度1.线程的生命周期2.线程调度与优先级2.1线程的调度模型2.2改变线程状态四、线程的同步机制1.共享数据的线程“互斥”原创 2015-03-24 11:42:14 · 735 阅读 · 0 评论 -
Java异常处理
1.异常的定义2.异常类2.1 系统定义的异常2.2 用户自定义异常3.异常处理3.1 直接抛出异常3.2 间接抛出异常3.3 综合方法4.多异常的处理5、Java异常处理的原则和技巧原创 2015-03-23 21:34:21 · 1303 阅读 · 0 评论 -
Java中的split函数的用法
Java中的 split 函数是用于按指定字符(串)或正则去分割某个字符串,结果以字符串数组形式返回;例如:String str="1234@abc";String[] a = str.split("@");System.out.println("处理结果: "+a[0]+","+a[1]); //输出的是: 处理结果: 1234,abc对于分割的字符(串),通常是常见,转载 2015-06-23 16:02:14 · 777 阅读 · 0 评论 -
比较java comparable和Comparator 区别
Comparable & Comparator 都是用来实现集合中的排序的,只是 Comparable 是在集合内部定义的方法实现的排序, * Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。 * Comparable 是一个对象本身就已经支持自比较所需要转载 2015-06-22 19:56:22 · 640 阅读 · 0 评论 -
java.util.ArrayList.toArray(T[]) 方法实例
java.util.ArrayList.toArray(T[]) 方法返回一个包含所有在此列表中正确的序列中的元素(从第一个到最后一个元素)数组以下是关于ArrayList.toArray()要点:1.返回数组的运行时类型是指定数组的。如果列表中指定的数组能容纳,则在其中返回。否则,一个新的数组分配具有指定数组的运行时类型和此列表的大小。2.如果列表中指定的数组能容纳更加节省空间(转载 2015-06-02 16:33:11 · 4198 阅读 · 0 评论