Java
文章平均质量分 74
Dazhu233
这个作者很懒,什么都没留下…
展开
-
排序算法
Java实现常用排序1.插入排序public class Sort { public void insertSort(int[] array ){//插入排序 for(int i=1;i<array.length;i++){ //第一次比较前两个元素大小,并且排好序。 int j; //往后每一...原创 2018-03-16 22:19:50 · 248 阅读 · 0 评论 -
ArrayList
ArrayListArrayList简单讲就是复杂版的Array,相比于Array,它能够动态增加和减少元素。对于ArrayList而言,它实现List接口、底层使用数组保存所有元素。其操作基本上是对数组的操作。ArrayList设置了数组的最大长度MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8初始大小为10,每次放入新元素之前先判断大小是否要超过容量,是的话就扩容1...原创 2018-03-28 11:04:49 · 204 阅读 · 0 评论 -
Java的构造函数
Java的构造函数Test1是Test的子类。我们来看一下构造函数的执行过程:声明一个Test1对象class Test{ static{ System.out.println(1); } Test(){ System.out.println(2); } Test(int s){ System.out...原创 2018-03-29 15:49:13 · 237 阅读 · 0 评论 -
Java内存管理
Java内存管理Java虚拟机所管理的内存包括以下几个运行时数据区域:线程私有区域1.程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的...转载 2018-04-20 16:10:45 · 177 阅读 · 0 评论 -
Java对象访问
Java对象访问在Java语言中,对象访问是如何进行的?对象访问在Java语言中无处不在,是最普通的程序行为,但即使是最简单的访问,也会却涉及Java栈、Java堆、方法区这三个最重要内存区域之间的关联关系,如下面的这句代码: Object obj = new Object();假设这句代码出现在方法体中,那“Object obj”这部分的语义将会反映到Java栈的本地变量表中,作为一个re...转载 2018-04-20 16:15:07 · 150 阅读 · 0 评论 -
String StringBuffer和StringBuilder
String StringBuffer和StringBuilder 首先这三者都是用来存储字符串的。 String、StringBuffer、StringBuilder都是被final修饰的,是不能够被继承改写的。 String存储的字符串常量,存储在字符串常量区(方法区中的一块地方)。所谓常量,即不可以改变的类型。当我们定义一个String str1="aaa" ,这时...原创 2018-04-24 21:22:04 · 418 阅读 · 0 评论 -
可达性分析
可达性分析 可达性分析算法的基本思路就是通过一系列的成为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径成为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可以用的。在Java语言中,可作为GC Roots的对象包括以下几种:虚拟机栈(栈帧中的本地变量表)中引用的对象。方法区中类静态属性引用的对象。方法区中常量引用的对象。本地方...原创 2018-05-13 15:19:18 · 3972 阅读 · 1 评论 -
设计模式之工厂模式
工厂模式三种工厂:简单工厂模式、工厂方法模式、抽象工厂模式。 简单工厂模式:简单工厂模式:用户可以通过工厂得到自己需要的产品,比如说通过工厂得到一双鞋,鞋子有耐克,adidas等。public class Customer { public static void main(...原创 2018-09-05 16:42:40 · 298 阅读 · 0 评论 -
设计模式之单例模式
单例模式饿汉式public class HungrySingleTon { private static HungrySingleTon instance = new HungrySingleTon(); public static HungrySingleTon getIns...原创 2018-09-05 20:09:40 · 243 阅读 · 0 评论 -
公平锁与非公平锁
公平锁与非公平锁公平锁与非公平锁即fairSybc和NonfairSync。简单说一下两个锁的区别:顾名思义,公平就是先到先得,比如A和B线程均需要获得一个锁,但是此时锁正在被另一个线程C占据着,这是如果A先来B后来。那么当C释放锁以后,A就会获得这个锁。如果是非公平的话,可能B后来但是能比A先获得锁。ReentrantLock可以设置锁的属性为公平还是非公平public ReentrantLoc...原创 2018-04-14 23:10:29 · 227 阅读 · 0 评论 -
LinkedBlockingQueue
LinkedBlockingQueueLinkedBlockingQueue是基于链表的阻塞FIFO队列,可以指定一个最大的长度限制以防止过度扩展,未指定情况下其大小为Integer.MAX_VALUEpublic LinkedBlockingQueue() { this(Integer.MAX_VALUE); }public LinkedBlockingQueue(int...原创 2018-04-14 20:16:08 · 237 阅读 · 0 评论 -
BlockingQueue子类之ArrayBlockingQueue
BlockingQueue子类之ArrayBlockingQueueInterface BlockingQueue<E>public interface BlockingQueue<E>extends Queue<E>BlockingQueue是Queue的子类,具有Queue的性质。它实现了几个主要的方法:1.add(E e)将特定的元素插入队列,如果队列的...原创 2018-04-14 19:16:02 · 278 阅读 · 0 评论 -
Vector
Vector Vector非常类似ArrayList,都继承自AbstractList并且都实现了List接口,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用I...原创 2018-03-17 14:08:58 · 5226 阅读 · 0 评论 -
Stack
Stackpublic class Stack<E> extends Vector<E>Stack是Vector的子类,是一个标准的先进后出的栈。Stack有几个自己特有的方法。Modifier and TypeMethod and Descriptionbooleanempty() Tests if this stack is empty.Epeek() Looks ...原创 2018-03-17 16:33:04 · 1443 阅读 · 0 评论 -
HashMap初始化和扩容
HashMap初始化和扩容先看HashMap的定义:public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V>, Cloneable, SerializableHashMap是AbstractMap的子类,实现了Map接口。HashMap() Constructs an empty...原创 2018-03-17 22:40:15 · 1302 阅读 · 0 评论 -
HashMap常用方法分析
HashMap的方法分析我们用的最多的应该就是put方法了,那我们就先来分析一下HashMap的put方法。先看源码:当我们要放入一组(key,value)到HashMap中时,到底经历了怎样的过程。public V put(K key, V value){ if(key==null) //如果key为null...原创 2018-03-24 14:55:54 · 2729 阅读 · 0 评论 -
HashMap中的hash与rehash
HashMap中的hash与rehash我们知道HashMap中经常用到hash()方法。比如:put()方法中public V put(K key, V value){ if(key==null) return putForNullKey(value) ; int hash=hash(key.hashCode()); ...原创 2018-03-24 16:08:34 · 9902 阅读 · 4 评论 -
多线程并发下的HashMap
多线程并发下的HashMapHashMap在多线程高并发下时线程不安全的,可能会出现cpu占用过高(死循环)的情况。这个现象的出现从源码分析来看,这个死循环的出现时因为resize()时复制元素时产生了循环链表。此部分转载自https://yq.aliyun.com/articles/66683void transfer(Entry[] newTable) { Entry[] ...转载 2018-03-24 21:37:26 · 1514 阅读 · 0 评论 -
HashMap在Java8中的红黑树
红黑树在HashMap中的应用我们知道在jdk1.8之前,HashMap采用链表的方式解决冲突,不过在更新1.8版本之后,HashMap采用了链表加红黑树的方式来优化了结构。话不多说,我们来看源码:/** * The bin count threshold for using a tree rather than list for a * bin. Bins are con...原创 2018-03-25 12:18:07 · 3028 阅读 · 0 评论 -
Java中线程池的实现
Java中线程池的实现 当我们要使用线程时,就要去创建线程,这样看上去似乎很正常,但是频繁地创建线程、销毁线程会对系统资源造成不小地负担,大大降低了系统地效率。Java中有一个很好地工具,可以事先创建好一些线程,当我们需要使用地时候就直接拿来使用就可以,这样就不会频繁地创建和销毁线程了,这个神奇地工具就是线程池。线程池是通过Executor执行器来创建。我们来看一下在java.util.conc...原创 2018-04-14 16:43:53 · 255 阅读 · 0 评论 -
Java反射
Java反射 反射的功能:能够在程序运行时动态获取一个类的完整信息。在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判段任意一个类所具有的成员变量和方法 在运行时调用任一个对象的方法 在运行时创建新类对象 在使用Java的反射功能时,基本首先都要获取类的Cl...原创 2018-09-07 16:02:16 · 262 阅读 · 0 评论