
分析研究
xlj3
静以修身,俭以养德
展开
-
static的研究
第一点:static修饰属性和方法: static 只能声明属性和方法,声明的属性是静态属性,声明方法是静态方法; (1)声明的静态方法,可以直接有类名打点调用; (2)static 中不允许使用super和this (3)static 声明声明的字段,只能被实例化一次;表示该属性被声明static时,就已经被分配了内 存空间;(后面将静态初始化块是再验证) (原创 2016-08-22 11:55:13 · 291 阅读 · 0 评论 -
ConcurrentHashMap的迭代器是强一致性的迭代器还是弱一致性的迭代器
而在迭代时,ConcurrentHashMap使用了不同于传统集合的快速失败迭代器(见之前的文章《JAVA API备忘---集合》)的另一种迭代方式,我们称为弱一致迭代器。在这种迭代方式中,当iterator被创建后集合再发生改变就不再是抛出ConcurrentModificationException,取而代之的是在改变时new新的数据从而不影响原有的数据,iterator完成后再将头指针替换为原创 2016-08-26 20:23:52 · 7965 阅读 · 0 评论 -
expectedModCount和modCount关系,以及concurrentHashMap不加读锁的原因
public class TestArrayListIterator { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(10); Iterator iterator = list.iterator();原创 2016-08-26 20:21:08 · 4209 阅读 · 0 评论 -
ConcurrentHashMap
ConcurrentHashMap ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和 HashTable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加 锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不 用对整个ConcurrentHashMap加锁。 ConcurrentH原创 2016-08-26 19:27:54 · 544 阅读 · 0 评论 -
HashMap浅析
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 2. HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本转载 2016-08-25 11:29:48 · 328 阅读 · 0 评论 -
Set集合分析
public boolean add(E e) { return map.put(e, PRESENT)==null; }这是set集合的add方法,可以看出set的值是map集合值的key =============================== Set(接口): 无序的、不允许重复、只能存放一个null。通过equals方法判断hashCode值,进行区分原创 2016-08-25 10:33:03 · 313 阅读 · 0 评论 -
Iterator源码剖析
让我们来看看AbstracyList如何创建Iterator。首先AbstractList定义了一个内部类(inner class): private class Itr implements Iterator { ... } 而iterator()方法的定义是:原创 2016-08-25 10:22:02 · 412 阅读 · 0 评论 -
对foreach、for、iterator测试
package my.code; import java.util.Arrays; import java.util.Iterator; import java.util.List; public class TestFor { public TestFor() { Integer[] tarray = new Integer[15000000]; for (int i =原创 2016-08-25 10:01:27 · 357 阅读 · 0 评论 -
LinkedList工作原理及实现
以双向链表实现。链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作。 按下标访问元素—get(i)/set(i,e) 要悲剧的遍历链表将指针移动到位(如果i>数组大小的一半,会从末尾移起)。 插入、删除元素时修改前后节点的指针即可,但还是要遍历部分链表的指针才能移动到下标所指的位置,只有在链表两头的操作—add(), addFirst(),removeLast()或原创 2016-08-25 09:24:44 · 457 阅读 · 0 评论 -
浅析集合不安全例子
package com.bochy.list; import java.util.ArrayList; import java.util.List; public class ArrayListConcurrentProblem { public static void main(String[] args) { final List list = new ArrayList();原创 2016-08-24 14:21:29 · 559 阅读 · 0 评论 -
ArrayList浅析
什么是链表? 链表,顾名思义,是一条相互链接的数据节点表。每个节点由两部分组成:数据和指向下一个节点的指针。链表的基本结构如下图所示: 一般来说,链表的头结点不存放具体的数据,所以也被称为哑节点(dummy node)。原因在于这样可以比较好地区分链表的头结点,而且可以大大简化链表的各种操作,避免很多不必要的边界讨论。 链表的种类 单向链表 双向链表 循环链表 多向表(原创 2016-08-23 17:36:15 · 400 阅读 · 0 评论 -
transient
transient Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的 class A implements Serializable { private String name; transient private String address;原创 2016-08-23 16:08:22 · 347 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
volatile保证多线程共享内存资源 首先:每个线程操作都有自己的内存空间: 一个线程更改,立即写入内存供其他线程使用(保证可见性); 一个线程更改,还未写入内存,其他线程读取内存数据操作,造成两次操作,一次更改(原子性为保证); 同时也保证了有序性; 也就是说volatile不能随便用:例如 package com.bochy.valotitle; public class Co原创 2016-08-23 11:02:54 · 471 阅读 · 0 评论 -
foreach原理
// 1 for (int i = 0; i < list.size(); i++) { int item = list.get(i); System.out.println("这是第" + (i+1) + "个:值为:" + item); } // 2 int j = 0;原创 2016-08-23 09:18:56 · 332 阅读 · 0 评论 -
微信中发现的问题,做一分析(见同目录其他文)
1、基本语法 这包括static、final、transient等关键字的作用,foreach循环的原理等等。今天面试我问你static关键字有哪些作用,如果你答出static修饰变量、修饰方法我会认为你合格,答出静态块,我会认为你不错,答出静态内部类我会认为你很好,答出静态导包我会对你很满意,因为能看出你非常热衷研究技术。 最深入的一次,LZ记得面试官直接问到了我volatile关键原创 2016-08-22 17:10:28 · 869 阅读 · 0 评论 -
final的分析
源自:http://www.cnblogs.com/dolphin0520/p/3736238.html 1.修饰类 当用final修饰一个类时,表明这个类不能被继承 2.修饰方法 “使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于原创 2016-08-22 17:07:34 · 374 阅读 · 0 评论 -
java声明周期的简要说明
像局部变量的作用域就是他的生命周期。 比如if ,for ,switch等等这些。 出了这个结构就销毁了。 方法里的局部变量,在方法调用完就销毁。 如果是类的成员变量,在类的相应的对象销毁的时候销毁。 上面说的是普通变量,如果是静态变量的时候,从程序开始,到程序结束原创 2016-08-22 16:04:41 · 343 阅读 · 0 评论 -
针对-128到127之间的数据,做了一个数据缓冲池
package test; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.Log原创 2016-09-20 15:21:48 · 962 阅读 · 0 评论