自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 资源 (3)
  • 收藏
  • 关注

原创 DualPivotQuicksort两枢轴快速排序

参考jdk DualQuickSort源码 普通快速排序一次把数据划分成两部分,两部分再分别递归,两枢轴,就是两个结点,把数据划分成三部分,三部分再分别递归,可参考下图 left part center part right part +-------------------------------

2016-07-27 22:00:24 2492

原创 TreeSet类源码解析

TreeSet特点 1.内部同时TreeMap实现,TreeMap中的key就是集合的元素,value = new Object() 2.排序规则默认是key自然排序,也可以自定义排序 3.TreeMap内部通过红黑树实现,这个树是二叉树 结点定义如下 static final class Entry<K,V> { K key; V value;

2016-07-24 16:41:54 1595

原创 NavigableSet接口源码解析

NavigableSet 为了TreeSet做准备,增加了获取第一个,最后一个,小于x,大于x等节点的操作,以及正向和逆向的迭代器package java.util;public interface NavigableSet<E> extends SortedSet<E> { /** * Returns the greatest element in this set stri

2016-07-24 16:32:56 1312

原创 TreeMap类源码解析

TreeMap特点 1.利用红黑树存储结点 2.插入、删除、查找时间复杂度都是O(logn) 3.没有实现同步方法线程不安全 ,效率较高 4.结点可以按照排序输出,默认排序是key值,可以自定义排序方法包package java.util;继承AbstractMap 实现NavigableMap、Cloneable、 java.io.Serializablepublic class

2016-07-18 15:51:13 886

原创 NavigableMap接口源码解析

NavigableMap 增加了一些方法用于TreeMappackage java.util;public interface NavigableMap<K,V> extends SortedMap<K,V> { /** * 返回小于key的最大值的结点 * @return an entry with the greatest key less than {@cod

2016-07-18 15:03:43 1890

原创 LinkedHashSet类源码解析

LinkedHashSet概述: LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。 注意,此实现不是同步的。如果多个线程同时访问链接的哈希Set,而其中至少一个线程修改了该Set,则它必须保持外部同步。LinkedHa

2016-07-17 16:37:08 1190

原创 HashSet类源码解析

HashSet特点 1.内部通过HashMap实现set的特征,HashMap的key就是集合的元素,value都设置为null 2.几乎就是HashMap 源码如下package java.util;public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Seri

2016-07-17 16:17:07 1145

原创 SortedMap接口源码解析

TreeMap的父接口package java.util;public interface SortedMap<K,V> extends Map<K,V> { Comparator<? super K> comparator(); SortedMap<K,V> subMap(K fromKey, K toKey); SortedMap<K,V> headMap(K toKey)

2016-07-17 16:08:24 1165

原创 WeakHashMap类源码解析

WeakHashMap特点 1.内部通过数组实现,和HashMap很类似 2.地址冲突通过链表实现,和HashMap一样 2.当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值 相关包package java.util;import java.lang.ref.WeakReference;import java.lang.ref.ReferenceQueue;继

2016-07-17 15:50:15 1195

原创 IdentityHashMap类源码解析

IdentityHashMap 1.内部通过数组存储键值对,相邻元素存在键值对 比如:i 位置是key,i+1位置是value 2.当hashcode相等,出现冲突的时候,通过线性探索发解决冲突问题 3.比较的是引用相等 IdentityHashMap与常用的HashMap的区别是: 前者比较key时是“引用相等”而后者是“对象相等”,即对于k1和k2,当k1==k2时,Identity

2016-07-17 15:14:45 2446

原创 AbstractMap抽象类源码解析

实现了Mappackage java.util;import java.util.Map.Entry;/** * AbstractMap */public abstract class AbstractMap<K,V> implements Map<K,V> { /** * 空构造函数 */ protected AbstractMap() { }

2016-07-17 14:27:14 3709

原创 LinkedHashMap类源码解析

LinkedHashMap 1.通过链表实现存储继承HashMap 实现Mappublic class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>成员变量 private static final long serialVersionUID = 3801124242820219131L; /

2016-07-17 11:38:43 2357

原创 EnumMap类源码解析

EnumMap 内部通过数组存在元素 key:表示的是枚举类型,这个类型要一样 用value存储枚举具体的存储值 通过ordinal方法,使得有序存储package java.util;import java.util.Map.Entry;import sun.misc.SharedSecrets;/** * @author Josh Bloch * @see EnumSet *

2016-07-17 10:36:29 1613

原创 HashMap类源码解析

HashMap特点: 1.key-value键值对表示一个数据项 2.内部通过数组实现 3.没有实现同步方法,多线程线程不安全,效率较高 4. 所在包package java.util;import java.io.*;继承AbstractMap 实现Map、Cloneable、Serializablepublic class HashMap<K,V> extends

2016-07-16 20:27:44 1681

原创 Hashtable类源码解析

Hashtable特点 1.key-value键值对表示一个数据项 2.内部通过数组存储数据 3.实现了同步方法,线程安全,效率低 4.两个重要参数:初始容量(默认11),载入因子(默认0.75)所在包package java.util;import java.io.*;继承Dictionary 实现Map、Cloneable、java.io.Serializablepublic cla

2016-07-16 19:23:03 1451

原创 Dictionary抽象类源码解析

Dictionarypackage java.util;public abstractclass Dictionary<K,V> { public Dictionary() { } abstract public int size(); abstract public boolean isEmpty(); abstract public Enumeration<K

2016-07-16 16:53:59 1225

原创 Map接口源码解析

Map 每个数据项是key-value数据对 key不能重复 接口内代码比较少,都是基本操作package java.util;public interface Map<K,V> { // Query Operations int size(); boolean isEmpty(); boolean containsKey(Object key); boole

2016-07-16 16:50:55 1247

原创 EnumSet抽象类源码解析

EnumSet 专门为枚举类设计的集合类,所有元素必须是枚举类型 EnumSet的集合元素是有序的,内部以位向量的形成存储,因此占用内存小,效率高 不允许加入null元素 源码package java.util;import sun.misc.SharedSecrets;public abstract class EnumSet<E extends Enum<E>> extends Ab

2016-07-16 16:39:48 1330

原创 SortedSet接口源码解析

SortedSet接口为TreeSet做准备 可以实现排序集合 源码package java.util;public interface SortedSet<E> extends Set<E> { /** * 比较器 */ Comparator<? super E> comparator(); /** * 获取子集 * @throw

2016-07-16 16:03:40 1270

原创 AbstractSet抽象类源码解析

继承AbstractCollection 实现Set 源码如下package java.util;public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> { protected AbstractSet() { } public boolean equals(Ob

2016-07-16 15:53:43 1293

原创 Set接口源码解析

Set 无须集合 元素不可以重复 接口内源码和上面其他接口很类似package java.util;public interface Set<E> extends Collection<E> { int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); O

2016-07-16 15:50:31 922

原创 Stack类源码解析

Stack 1.通过继承Vector类实现栈功能 2.增加同步方法,线程安全,效率低package java.util;publicclass Stack<E> extends Vector<E> { /** * 创建栈 */ public Stack() { } /** * 入栈 * @return the <code

2016-07-16 15:44:10 891

原创 PriorityQueue类源码解析

所在包package java.util;继承AbstractQueue 实现java.io.Serializablepublic class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Serializable {// 内部代码下面讲解}五个变量 private static final long s

2016-07-16 15:27:41 1732

原创 ArrayDeque类源码解析

ArrayDeque 1.数组实现双向队列 2.没有实现同步方法,线程不安全,效率较高 3.比LinkedList效率高 4.实现了栈,队列,作为栈使用时候效率比Stack高,作为队列时候比LinkedList效率高通过数组实现双端队列,注意实现的还是循环队列所在包package java.util;import java.io.*;继承AbstractCollection 实现Dequ

2016-07-16 14:08:30 1534

原创 AbstractQueue抽象类源码解析

继承Queue 对一些方法增加抛出异常package java.util;public abstract class AbstractQueue<E> extends AbstractCollection<E> implements Queue<E> { /** * 空构造器 */ protected AbstractQueue() { }

2016-07-16 09:30:24 664

原创 Deque接口源码解析

Deque 双向队列 队头:可以插入可以删除 队尾:可以插入可以删除 继承Queue接口源码如下:package java.util;public interface Deque<E> extends Queue<E> { /** * 队头插入元素 * * @throws 队列满了添加元素,抛出:IllegalStateException

2016-07-16 09:15:37 1680 1

原创 Queue接口源码解析

队列 先进先出 入队列:offer 出队列:poll 队头元素:peek 继承:Collection抽象类 源码如下:package java.util;public interface Queue<E> extends Collection<E> { /** * 队列插入元素 * * @param e the element to add

2016-07-16 09:00:05 891

原创 LinkedList源码解析

LinkedList特点 1.内部通过双向链表存储数据 2.插入、删除不需要移动元素,只需要修改指针所在包package java.util;继承AbstractSequentialList抽象类 实现List、Deque、Cloneable、java.io.Serializablepublic class LinkedListE> extends Abstrac

2016-07-15 20:30:44 1130

原创 AbstractSequentialList抽象类源码解析

所在包package java.util;继承AbstractList抽象类public abstract class AbstractSequentialList<E> extends AbstractList<E> {// 内部代码下面讲解}空构造器protected AbstractSequentialList() { }获取指定index位置的元素 这里是通过迭代器获取 /*

2016-07-15 19:01:32 1290

原创 ArrayList类源码解析

ArrayList特点: 1.内部通过数组实现 2.删除、插入元素需要大量移动元素 3.默认存储容量是null,需要增加容量时候,默认增加的容量等于原始ArrayList的容量 4.没有实现同步方法,多线程的时候,线程不安全,效率较高 5.存储元素的顺序就说加入集合中的顺序,方便指定index访问元素 所在包package java.util;继承AbstractList抽象类 实现

2016-07-15 16:49:54 1432 1

原创 Vector类源码解析

Vector特点: 1.内部通过数组实现 2.通过synchronized同步方法,线程安全,适合多线程 3.由于线程安全,效率不高 4.默认存放10个元素 所在包package java.util;继承AbstractList 实现List 、RandomAccess、Cloneable、java.io.Serializable Clone: 简单的说就是clone一个对象实例。使

2016-07-15 12:26:35 1790

原创 AbstractList抽象类源码解析

所在包package java.util;继续AbstractCollection抽象类 实现List接口public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>{// 内部代码下面讲解}空构造器protected AbstractList() { }添加元素,在尾部添加

2016-07-15 11:03:18 1399 1

原创 List接口源码解析

所在包package java.util;继承Collection接口public interface List<E> extends Collection<E> {// 内部代码下面讲解}集合元素大小int size();是否为空boolean isEmpty();是否包含元素oboolean contains(Object o);转化为数组Object[] toArray();更新数组a<T

2016-07-15 10:32:41 908

原创 AbstractCollection抽象类源码解析

所在包package java.util;AbstractCollection抽象类实现Collection接口public abstract class AbstractCollection<E> implements Collection<E>{// 代码下面讲解}默认构造器protected AbstractCollection() { }获得迭代器public abstract

2016-07-15 10:04:53 629

原创 Collection接口源码解析

所在包package java.util;继承Iterable类public interface Collection<E> extends Iterable<E> {// 内部代码下面讲解}获得集合内元素的数量 当数量大于Integer.MAX_VALUE时候,只能返回Integer.MAX_VALUE int size();判断集合是否为空 空的时候返回true boole

2016-07-15 09:40:31 716

原创 LRU缓存策略

题目为最近最少使用(LRU)缓存策略设计一个数据结构,它应该支持以下操作:获取数据(get)和写入数据(set)。获取数据get(key):如果缓存中存在key,则获取其数据值(通常是正数),否则返回-1。写入数据set(key, value):如果key还没有在缓存中,则写入其数据值。当缓存达到上限,它应该在写入新数据之前删除最近最少使用的数据用来腾出空闲位置。解题参考链接 1.利用双链表记录顺

2016-07-14 19:08:33 1980

原创 K组翻转链表

题目给你一个链表以及一个k,将这个链表从头指针开始每k个翻转一下。 链表元素个数不是k的倍数,最后剩余的不用翻转。 样例 给出链表 1->2->3->4->5k = 2, 返回 2->1->4->3->5k = 3, 返回 3->2->1->4->5解题同样用到递归的方式 利用k找到需要翻转的部分链表,利用头插法进行翻转 注意当链表长度不足k个的时候不需要翻转,这里我是单独进行判断的。

2016-07-14 17:07:03 2147

原创 重排链表

题目给定一个单链表L: L0→L1→…→Ln-1→Ln,重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-2→…必须在不改变节点值的情况下进行原地操作。 样例 给出链表 1->2->3->4->null,重新排列后为1->4->2->3->null。解题当程序不会写的时候考虑递归解决第一个节点head 第二个节点headNext 最后一个节点lastNode 最后一个节点前驱节点las

2016-07-14 16:45:04 2249

原创 旋转链表

题目给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数 样例 给出链表1->2->3->4->5->null和k=2返回4->5->1->2->3->null解题找到第k个结点 找到最好一个结点 最后一个结点链接到头结点 第k个结点后面断开/** * Definition for singly-linked list. * public class ListNod

2016-07-14 16:14:07 1144

原创 交换链表当中两个节点

题目给你一个链表以及两个权值v1和v2,交换链表中权值为v1和v2的这两个节点。保证链表中节点权值各不相同,如果没有找到对应节点,那么什么也不用做。 注意事项 你需要交换两个节点而不是改变节点的权值解题找到这两个结点的前驱节点 node1Prev node1 node2Prev node2 node2Next 利用上面五个结点进行链接 node1Prev.next = node2;

2016-07-13 09:53:02 3276

The Matrix CookBook

The Matrix CookBook,关于矩阵的运算公式

2015-02-05

空空如也

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

TA关注的人

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