LinkedList :


  1. /**
  2. * 考虑的比较的周全,并且包含了全部的情况,代码也不乱<b></b>
  3. *
  4. * @param index
  5. * 插入的位置
  6. * @param c
  7. * 插入的元素集合
  8. */
  9. private boolean addAll(int index, Collection<? extends E> c) {
  10. // 缺少对于size的参数的校验
  11. Object[] a = c.toArray();
  12. int numNew = a.length;
  13. if (numNew == 0)
  14. return false;
  15. // 确定插入的位置和插入的前一个位置
  16. Node<E> pred, succ;
  17. if (index == size) {
  18. succ = null;
  19. pred = last;
  20. } else {
  21. succ = node(index);
  22. pred = succ.prev;
  23. }
  24. // 首先就是能够确认自己前面的一个节点是谁,size指的是插入的位置,后面的全部的一次
  25. // 向后移动
  26. for (Object o : a) {
  27. @SuppressWarnings("unchecked")
  28. E e = (E) o;
  29. Node<E> newNode = new Node<E>(pred, e, null);
  30. if (pred == null)
  31. first = newNode;
  32. else
  33. pred.next = newNode;
  34. pred = newNode;
  35. }
  36. // 把插入后面的元素接上
  37. if (succ == null) {
  38. last = pred;
  39. } else {
  40. pred.next = succ;
  41. succ.prev = pred;
  42. }
  43. size += numNew;
  44. return true;
  45. }
  46. /**
  47. * Returns the (non-null) Node at the specified element index. the alg is
  48. * interesting
  49. */
  50. private Node<E> node(int index) {
  51. if (index < (size >> 1)) {// 前半截,后半截
  52. Node<E> x = first;
  53. for (int i = 0; i < index; i++)
  54. x = x.next;
  55. return x;
  56. } else {
  57. Node<E> x = last;
  58. for (int i = size - 1; i > index; i--)
  59. x = x.prev;
  60. return x;
  61. }
  62. }

add function 代码写的还是比较的精彩的:
  1. public boolean add(E e) {
  2. linkLast(e);
  3. return true;
  4. }
  5. /**
  6. * @param e
  7. */
  8. private void linkLast(E e) {
  9. // 尾节点,final ?
  10. final Node<E> l = last;
  11. final Node<E> newNode = new Node<E>(l, e, null);
  12. last = newNode;
  13. // special situation
  14. if (l == null)
  15. first = newNode;
  16. else
  17. l.next = newNode;
  18. size++;
  19. }
  20. /**
  21. * Inserts the specified element at the specified position in this list.
  22. * Shifts the element currently at that position (if any) and any subsequent
  23. * elements to the right (adds one to their indices).
  24. *
  25. * @param index
  26. * index at which the specified element is to be inserted
  27. * @param element
  28. * element to be inserted
  29. * @throws IndexOutOfBoundsException
  30. * {@inheritDoc}
  31. */
  32. public void add(int index, E element) {
  33. checkPositionIndex(index);
  34. if (index == size)
  35. linkLast(element);
  36. else
  37. linkBefore(element, node(index));
  38. }
  39. private void linkBefore(E element, Node<E> succ) {
  40. // assert succ != null;
  41. final Node<E> pred = succ.prev;
  42. final Node<E> insert = new Node<E>(pred, element, succ);
  43. succ.prev = insert;
  44. if (pred == null)
  45. first = insert;
  46. else
  47. pred.next = insert;
  48. size++;
  49. }
  50. private boolean isPositionIndex(int index) {
  51. return index >= 0 && index <= size;
  52. }
  53. private void checkPositionIndex(int index) {
  54. if (!isPositionIndex(index))
  55. throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
  56. }
  57. private String outOfBoundsMsg(int index) {
  58. return "Index: " + index + ", Size: " + size;
  59. }


Foundation Data Structure的更多相关文章

  1. [LeetCode] All O`one Data Structure 全O(1)的数据结构

    Implement a data structure supporting the following operations: Inc(Key) - Inserts a new key with va ...

  2. [LeetCode] Add and Search Word - Data structure design 添加和查找单词-数据结构设计

    Design a data structure that supports the following two operations: void addWord(word) bool search(w ...

  3. [LeetCode] Two Sum III - Data structure design 两数之和之三 - 数据结构设计

    Design and implement a TwoSum class. It should support the following operations:add and find. add - ...

  4. Finger Trees: A Simple General-purpose Data Structure

    http://staff.city.ac.uk/~ross/papers/FingerTree.html Summary We present 2-3 finger trees, a function ...

  5. Mesh Data Structure in OpenCascade

    Mesh Data Structure in OpenCascade eryar@163.com 摘要Abstract:本文对网格数据结构作简要介绍,并结合使用OpenCascade中的数据结构,将网 ...

  6. ✡ leetcode 170. Two Sum III - Data structure design 设计two sum模式 --------- java

    Design and implement a TwoSum class. It should support the following operations: add and find. add - ...

  7. leetcode Add and Search Word - Data structure design

    我要在这里装个逼啦 class WordDictionary(object): def __init__(self): """ initialize your data ...

  8. Java for LeetCode 211 Add and Search Word - Data structure design

    Design a data structure that supports the following two operations: void addWord(word)bool search(wo ...

  9. HDU5739 Fantasia(点双连通分量 + Block Forest Data Structure)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5739 Description Professor Zhang has an undirect ...

随机推荐

  1. 第一篇:数据工程师眼中的智能电网(Smart Grid)

    前言 想必第一次接触到智能电网这个概念的人,尤其是互联网从业者,都会顾名思义的将之理解为"智能的电网". 然而智能电网中的"智能"是广义上的智能,它就是指更好的 ...

  2. [转] Nginx模块开发入门

    前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...

  3. Android(java)学习笔记247:ContentProvider使用之利用ContentProvider备份和还原手机短信(掌握)

    1.通过阅读系统源码我们知道: 短信的内容提供者: content://sms/            系统短信的内容提供者的路径 2. 利用ContentProvider备份和还原手机短信: (1) ...

  4. Python之路,Day16 - Django 进阶

    Python之路,Day16 - Django 进阶   本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproj ...

  5. JavaScript--动态更改CSS样式

    JavaScript太强大了,虽然是弱语言,不过一点都不输于Java 可以自行设置随机数,来动态更改CSS样式,每一次都是不一样的感觉,这个小功能挺实用的 <!DOCTYPE html> ...

  6. 突然想写点东西,关于web新人的。采用问答方式

    我自己是会计专业,转行自学web的,学习有一两年了,也还是新人一个,只不过不是那种超级“新”的,所以有什么话说得不对,请轻喷.欢迎大家来和我交流. 1.我能不能转行学web? 能不能学web这个不是别 ...

  7. application/json IE 兼容问题

    由于IE系列浏览器把application/json响应视为文件,并尝试下载在网上看了一下,大致了解,只要修改返回的内容的类型(ContentType)即可解决问题. 由于ajax请求,返回类型默认就 ...

  8. 关于java中Double类型的运算精度问题(转)

    Java Java double:浮点数:精确计算  public class Test{    public static void main(String args[]){        Syst ...

  9. iOS9中将图片保存到照片中的某个相册的方法说明

    iOS9中将图片保存到照片中的某个相册的方法说明 在App中很经常遇到的就是用户点击某张图片后将图片保存到本地,下面介绍下iOS中保存图片的一些东西 1.首先,在iOS中把图片保存到系统照片是比较简单 ...

  10. Swift - 08 - 元组

    //: Playground - noun: a place where people can play import UIKit // 元组就是将多个不同的值集合成一个数据 /* 元组是Object ...