自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

转载 Java集合(17)--HashMap、Hashtable和ConcurrentHashMap的比较

1. 数据结构都是数组+拉链实现的哈希表,但是具体实现上差别大了2. 并发Hashtable全表锁HashMap多线程不安全,需要自己封装ConcurrentHashMap加细粒度锁,读不加锁,如果读到空值再加锁。注意这三个关键字final,transient,volatile3. nullHashtable不允许用 null作为键和值HashMap...

2015-08-17 23:28:00 108

转载 Java集合(16)--快速失败机制(Fail-Fast)

迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。 它是Java集合的一种错误检测机制。当多个线程对集合进行结构上的...

2015-08-17 23:27:00 188

转载 Java集合(15)--ConcurrentHashMap源码分析

ConcurrentHashMap使用了锁分离技术, 使用了多个锁来控制对hash表的不同部分进行的修改。使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。 有些方法需要跨段,比如size()和containsValue(),它们可能需要锁定整个表而...

2015-08-17 23:19:00 78

转载 Java集合(14)--双枢轴快速排序(DualPivotQuicksort)

JDK1.7 java.uti.Arrays开始使用DualPivotQuicksort作为默认排序方法详细讲解链接:http://www.tuicool.com/articles/BfY7Nz算法思想:选出两个枢轴P1和P2,需要3个指针L,K,G。3个指针的作用如下图:算法为以下的步骤:(数组大小小于286时,使用DualPivotQuickso...

2015-08-17 23:08:00 366

转载 Java集合(13)--LinkedHashMap源码分析

HashMap使用哈希表来存储数据,并用拉链法来处理冲突。LinkedHashMap继承自HashMap,同时自身有一个链表,使用链表存储数据,不存在冲突。LinkedList和LinkedHashMap一样使用一个双向循环链表,但LinkedList存储的是简单的数据,并不是“键值对”。LinkedList和LinkedHashMap都可以维护内容的顺序,但HashMap不维护...

2015-08-17 23:02:00 87

转载 Java集合(12)--TreeSet源码分析

TreeSet 底层实际使用的存储容器就是 TreeMap,他们的关系就像HashMap和HashSet的关系。TreeSet采用了TreeMap作为其Map保存“键-值”对,所以TreeSet判断元素重复是依靠Comparable接口或Comparator接口实现的。转载于:https://www.cnblogs.com/pipi-style/p/4738052.html...

2015-08-17 22:55:00 86

转载 Java集合(11)--TreeMap源码分析

TreeMap继承关系,和HashMap同继承于AbstractMap,属于兄弟关系。public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable-...

2015-08-17 22:54:00 78

转载 Java集合(10)--HashSet源码分析

由哈希表实现,实际底层为HashMap。public HashSet(Collection<? extends E> c) { map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); }public Ha...

2015-08-17 22:46:00 76

转载 Java集合(9)--Collection 和 Collections

Collection 是集合类的上级接口,继承于他的接口主要有 Set和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 Set 里的元素是不能重复的,元素重复与否是使用 equals()方法进行判断的。 对象要保存在 HashSet 或 HashMap 中,它们的 ...

2015-08-17 22:42:00 67

转载 Java集合(8)--HashMap源码分析

/** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 16; /** * The maximum capacity, used if a higher value ...

2015-08-17 22:40:00 72

转载 Java集合(7)--HashMap 和 Hashtable的比较

1)都实现了 Map 接口,HashMap 允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。2)HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsValue 和containsKey。3)Hashtable 是基于陈旧的 Dictionary 类的, HashMap 是 Java ...

2015-08-17 22:29:00 101

转载 Java集合(6)--LinkedList源码分析

ArrayList和Vector都实现了RandomAccess接口,而LinkedList没有,RandomAccess接口是一个空接口,所以它没有实际意义,就是一个标记,标记这个类支持快速随机访问,所以,arrayList和vector是支持随机访问的,但是LinkedList不支持。ArrayList和LinkedList做末尾add操作,ArrayList性能可能更高,由于Lin...

2015-08-17 22:28:00 76

转载 Java集合(5)--Vector源码分析

方法和ArrayList中基本上都是相同的,只是加了synchronized关键字,而调用subList时使用了Collections.synchronizedList。具体的以后有时间再分析。转载于:https://www.cnblogs.com/pipi-style/p/4737982.html...

2015-08-17 22:21:00 93

转载 Java集合(4)--System.arraycopy和Arrays.copyOf的比较

public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); 用了native关键字,调用的为C++编写的底层函数,可见其为JDK中的底层函数。public static int[] copyOf(int[] original, i...

2015-08-17 22:20:00 108

转载 Java集合(3)--ArrayList源码分析

默认初始容量为10,底层用的是对象数组实现的。public void ensureCapacity(int minCapacity)。确保数组最小容量,用于添加元素的时候。它的父类AbstractList只有一个抽象方法abstract public E get(int index);modCount:记录list结构被改变的次数,其实是改变大小时会自增,主要是add和rem...

2015-08-17 22:15:00 80

转载 Java集合(2)--ArrayList和Vector的比较

相同点:这两个类都实现了 List 接口( List 接口继承了 Collection 接口),他们都是有序集合(是指能够保持加入时的顺序),元素允许重复。不同点:(1) Vector 是线程安全,ArrayList 是线程序不安全,只有一个线程会访问到集合,那最好是使用ArrayList因为它不考虑线程安全,效率会高些,多个线程会访问到集合,那最好是使用 Vector....

2015-08-17 22:00:00 86

转载 Java集合(1)--Comparable 和 Comparator的比较

Comparable 是在集合内部定义的方法实现的排序;Comparator 是在集合外部实现的排序Comparator位于包java.util下,而Comparable位于包java.lang下Comparable 是一个对象本身就已经支持自比较所需要实现的接口,如 String、Integer 自己就可以完成比较大小操作,已经实现了Comparable接...

2015-08-17 21:56:00 131

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除