- 博客(295)
- 资源 (3)
- 收藏
- 关注
原创 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
1260
原创 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
1348
原创 SortedSet接口源码解析
SortedSet接口为TreeSet做准备 可以实现排序集合 源码package java.util;public interface SortedSet<E> extends Set<E> { /** * 比较器 */ Comparator<? super E> comparator(); /** * 获取子集 * @throw
2016-07-16 16:03:40
1284
原创 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
1307
原创 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
937
原创 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
904
原创 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
1751
原创 ArrayDeque类源码解析
ArrayDeque 1.数组实现双向队列 2.没有实现同步方法,线程不安全,效率较高 3.比LinkedList效率高 4.实现了栈,队列,作为栈使用时候效率比Stack高,作为队列时候比LinkedList效率高通过数组实现双端队列,注意实现的还是循环队列所在包package java.util;import java.io.*;继承AbstractCollection 实现Dequ
2016-07-16 14:08:30
1554
原创 AbstractQueue抽象类源码解析
继承Queue 对一些方法增加抛出异常package java.util;public abstract class AbstractQueue<E> extends AbstractCollection<E> implements Queue<E> { /** * 空构造器 */ protected AbstractQueue() { }
2016-07-16 09:30:24
682
原创 Deque接口源码解析
Deque 双向队列 队头:可以插入可以删除 队尾:可以插入可以删除 继承Queue接口源码如下:package java.util;public interface Deque<E> extends Queue<E> { /** * 队头插入元素 * * @throws 队列满了添加元素,抛出:IllegalStateException
2016-07-16 09:15:37
1696
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
909
原创 LinkedList源码解析
LinkedList特点 1.内部通过双向链表存储数据 2.插入、删除不需要移动元素,只需要修改指针所在包package java.util;继承AbstractSequentialList抽象类 实现List、Deque、Cloneable、java.io.Serializablepublic class LinkedListE> extends Abstrac
2016-07-15 20:30:44
1151
原创 AbstractSequentialList抽象类源码解析
所在包package java.util;继承AbstractList抽象类public abstract class AbstractSequentialList<E> extends AbstractList<E> {// 内部代码下面讲解}空构造器protected AbstractSequentialList() { }获取指定index位置的元素 这里是通过迭代器获取 /*
2016-07-15 19:01:32
1310
原创 ArrayList类源码解析
ArrayList特点: 1.内部通过数组实现 2.删除、插入元素需要大量移动元素 3.默认存储容量是null,需要增加容量时候,默认增加的容量等于原始ArrayList的容量 4.没有实现同步方法,多线程的时候,线程不安全,效率较高 5.存储元素的顺序就说加入集合中的顺序,方便指定index访问元素 所在包package java.util;继承AbstractList抽象类 实现
2016-07-15 16:49:54
1442
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
1811
原创 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
1431
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
921
原创 AbstractCollection抽象类源码解析
所在包package java.util;AbstractCollection抽象类实现Collection接口public abstract class AbstractCollection<E> implements Collection<E>{// 代码下面讲解}默认构造器protected AbstractCollection() { }获得迭代器public abstract
2016-07-15 10:04:53
652
原创 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
737
原创 LRU缓存策略
题目为最近最少使用(LRU)缓存策略设计一个数据结构,它应该支持以下操作:获取数据(get)和写入数据(set)。获取数据get(key):如果缓存中存在key,则获取其数据值(通常是正数),否则返回-1。写入数据set(key, value):如果key还没有在缓存中,则写入其数据值。当缓存达到上限,它应该在写入新数据之前删除最近最少使用的数据用来腾出空闲位置。解题参考链接 1.利用双链表记录顺
2016-07-14 19:08:33
1998
原创 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
2164
原创 重排链表
题目给定一个单链表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
2268
原创 旋转链表
题目给定一个链表,旋转链表,使得每个节点向右移动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
1157
原创 交换链表当中两个节点
题目给你一个链表以及两个权值v1和v2,交换链表中权值为v1和v2的这两个节点。保证链表中节点权值各不相同,如果没有找到对应节点,那么什么也不用做。 注意事项 你需要交换两个节点而不是改变节点的权值解题找到这两个结点的前驱节点 node1Prev node1 node2Prev node2 node2Next 利用上面五个结点进行链接 node1Prev.next = node2;
2016-07-13 09:53:02
3294
原创 回文链表
题目设计一种方式检查一个链表是否为回文链表。解题回文串的特征就是正反看结果都一样 如:aba、abcsdffdscba 所有翻转链表后比较 但是翻转链表改变了原始链表之间的指针 需要先复制原始链表 复制链表和选择链表进行比较/** * Definition for singly-linked list. * public class ListNode { * int val;
2016-07-12 21:14:49
1362
原创 删除排序链表中的重复数字 II
题目给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。 样例 给出 1->2->3->3->4->4->5->null,返回 1->2->5->null给出 1->1->1->2->3->null,返回 2->3->null解题记录相同个数 一个相同的保存,多个的跳过/** * Definition for ListNode * public class ListNode
2016-07-12 20:42:26
2449
原创 合并k个排序链表
题目合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。 样例 给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null解题两两合并 合并ab得到c 合并cd得到e/** * Definition for ListNode. * public class ListNode { * int val; * L
2016-07-12 16:02:05
1937
原创 排序列表转换为二分查找树
题目给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树解题找到中间点,建立树的根结点 左右半边递归 注意: 右半边链表可以根据找到的中间节点进行递归 左半边要找到结束位置,这里我新建了一个链表/** * Definition for ListNode. * public class ListNode { * int val; * ListNode
2016-07-12 09:53:25
1145
原创 链表排序
题目在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。您在真实的面试中是否遇到过这个题? Yes 样例 给出 1->3->2->null,给它排序变成 1->2->3->null.解题尝试快速排序,划分节点不知道怎么找 参考链接 快速排序 找到小于x,找到等于x,找到大于x,三个链表合并 注意: 如果小于x和等于x的在一起考虑,有错误 如:1 3 2 第一次划
2016-07-12 09:27:49
995
原创 翻转链表 II
题目翻转链表中第m个节点到第n个节点的部分 注意事项 m,n满足1 ≤ m ≤ n ≤ 链表长度 样例 给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null解题只需要翻转其中一部分 根据结点值进行更新链表 时间复杂度:O(n)O(n) 空间复杂度:O(n)O(n)/** * Definition for ListNo
2016-07-11 19:24:01
1760
原创 两个链表的交叉
题目请写一个程序,找到两个单链表最开始的交叉节点。 注意事项 如果两个链表没有交叉,返回null。 在返回结果后,两个链表仍须保持原有的结构。 可假定整个链表结构中没有循环。 样例 下列两个链表: 在节点 c1 开始交叉。解题单链表有交叉一定是上图的形式:两个指针指向同一个结点,之后不在分离。如果分了就出现一个指针指向两个结点的情况,这个时候就不是单链表了。根据上图:先求出两个链
2016-07-10 21:43:10
1031
原创 判断带环链表
题目给定一个链表,判断它是否有环。 给出 -21->10->4->5, tail connects to node index 1,返回 true解题两个指针不同步长走,当相遇了说明有环public class Solution { /** * @param head: The first node of linked list. * @return: True if
2016-07-10 21:03:19
607
原创 删除链表中倒数第n个节点
题目解题定义两个指针,slow、fast fast先先前走n步后、slow和fast一起走,直到fast到最后一个结点 当fast为空,说明fast在最后一个结点后面了,说明需要删除的是第一个结点,直接删除为了方便删除第一个结点,加入头结点下面slow.next指向的是需要删除的结点,直接删除/** * Definition for ListNode. * public class List
2016-07-10 20:54:09
2412
原创 链表求和
题目你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。 样例 给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null解题通过新建结点求和 注意进位情况,特别是最后可能还要进位的/** * Definition for singl
2016-07-10 20:43:44
704
原创 链表插入排序
题目用插入排序对链表排序 样例 Given 1->3->2->0->null, return 0->1->2->3->null解题public class Solution { /** * @param head: The first node of linked list. * @return: The head of linked list. */
2016-07-09 11:09:23
457
原创 链表划分
题目给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。 样例 给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->null解题定义两个链表,一个链接较小的,一个链接较大的,最后链接起来public class Solution { /** * @par
2016-07-09 10:26:08
1067
原创 两两交换链表中的节点
题目给一个链表,两两交换其中的节点,然后返回交换后的链表。 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。解题递归方式 交换p 和 p.next 结点 swapHead = p.next swapHead.next = p/** * Definition for singly-linked list. * public class ListNode {
2016-07-09 10:11:14
1963
原创 合并两个排序链表
题目将两个排序链表合并为一个新的排序链表 样例 给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。解题有序链表合并,找到较小的链接起来,指针后移/** * Definition for ListNode. * public class ListNode { * int val; * ListNode
2016-07-09 09:38:58
411
原创 删除排序链表中的重复元素
题目给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例 给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null解题加一个头结点 链表有序,找到不相等的时候,删除中间结点 两两比较是否相同进行删除/** * Definition for ListNode * public class ListNod
2016-07-09 09:05:25
420
原创 翻转链表
题目翻转一个链表 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null解题头插法/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val
2016-07-08 22:26:10
402
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅