关于实现链表的底层原理

链表便于增删,不便于查询

package com.littlepage.linkedList;
/**
* 基于底层实现LinkedList
* @author Littlepage
* @reference bjsxt.com
*
*/
public class LittlePagesLinkedList<E> {
private Node first;
private Node last; private int size; public void add(E obj) {
Node node = new Node(obj);
if (first == null) {
node.setPrevious(null);
node.setNext(null);
first = node;
last = node;
} else {
last.setNext(node);
node.setPrevious(last);
node.setNext(null);
last = node;
}
size++;
} public Node getFirst() {
return first;
} public void setFirst(Node first) {
this.first = first;
} public Node getLast() {
return last;
} public void setLast(Node last) {
this.last = last;
} public int getSize() {
return size;
} public void setSize(int size) {
this.size = size;
} @SuppressWarnings("unchecked")
public E getNode(int index) {
if(index>=size||index<){
throw new RuntimeException("Index out of bounds:"+index);
}
Node temp = first;
for (int i = ; i < index; i++) {
temp = temp.getNext();
}
return (E)temp.getElement();
} public void removeNode(int index) {
Node temp = first;
if (index < || index > size - ) {
throw new RuntimeException("Index number is illegal:" + index);
}
if (index == ) {
first = first.getNext();
first.setPrevious(null);
} else if (index == size - ) {
last = last.getPrevious();
last.setNext(null);
} else {
for (int i = ; i < index - ; i++) {
temp = temp.getNext();
}
temp.setNext(temp.getNext().getNext());
temp = temp.getNext().getNext();
temp.setNext(temp.getPrevious().getPrevious());
}
size--;
} @Override
public String toString() {
StringBuilder str = new StringBuilder();
str.append("[");
if(first!=null){
str.append(first);
Node temp=first;
while((temp=temp.getNext())!=null){
str.append(","+temp);
}
}
str.append("]");
return str.toString();
} }
package com.littlepage.linkedList;
/**
* 节点数据
* @author Littlepage
* @reference bjsxt.com
*
*/
public class Node {
private Node previous;
private Node next;
private Object element; public Node(Object element) {
this.element = element;
} public Node getPrevious() {
return previous;
} public void setPrevious(Node previous) {
this.previous = previous;
} public Node getNext() {
return next;
} public void setNext(Node next) {
this.next = next;
} public Object getElement() {
return element;
} public void setElement(Object element) {
this.element = element;
} @Override
public String toString() {
return element.toString();
}
}
package com.littlepage.linkedList;
/**
* 测试类
* @author Littlepage
* @reference bjsxt.com
*
*/
public class Test {
public static void main(String[] args) {
LittlePagesLinkedList<String> list=new LittlePagesLinkedList<>();
list.add("aa");
list.add("pp");
System.out.println(list);
}
}

Vector向量中大部分方法加了sychronized,保证线程安全

Java SE LinkedList的底层实现的更多相关文章

  1. Java 的 LinkedList 的底层数据结构

    1. 数据结构--LinkedList源码摘要 public class LinkedList<E> extends AbstractSequentialList<E> imp ...

  2. Java SE HashMap的底层实现

    1.hash散列算法 由于hashmap在存储过程中是数组加链表的存储过程,所以定义数组长度为16(建议是2的n次幂的长度),之后进行每个数组的地址都指向一个链表进行存储 hash表算法可对数组长度l ...

  3. Java SE教程

    第0讲 开山篇 读前介绍:本文中如下文本格式是超链接,可以点击跳转 >>超链接<< 我的学习目标:基础要坚如磐石   代码要十份规范   笔记要认真详实 一.java内容介绍 ...

  4. Java SE基础知识

    Java SE面试题 目录 Java SE基础 基本语法 数据类型 关键字 面向对象 集合 集合类概述 Collection接口 List Set Map Java SE基础 基本语法 数据类型 Ja ...

  5. Java:基于LinkedList实现栈和队列

    1.提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例.由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现. package junit; import java.util. ...

  6. Java集合---LinkedList源码解析

    一.源码解析1. LinkedList类定义2.LinkedList数据结构原理3.私有属性4.构造方法5.元素添加add()及原理6.删除数据remove()7.数据获取get()8.数据复制clo ...

  7. Java SE 6 新特性: 对脚本语言的支持

    2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...

  8. Java SE 6 新特性: HTTP 增强--转

    概述 Java 语言从诞生的那天起,就非常注重网络编程方面的应用.随着互联网应用的飞速发展,Java 的基础类库也不断地对网络相关的 API 进行加强和扩展.在 Java SE 6 当中,围绕着 HT ...

  9. DynamicMBean(Java SE 6 新特性: JMX 与系统管理)

    Dynamic MBean 是一种在运行时定义其管理接口的 MBean.例如,配置 MBean 可以通过解析 XML 文件来确定它所公开的属性名称和类型. 任何实现 DynamicMBean 接口的类 ...

随机推荐

  1. zabbix 监控项(key)

    Key 描述 返回值 参数 详细说明 agent.hostname 返回被监控端名称 字符串 - 返回配置文件中配置的被监控端的名称 agent.ping 检测被监控端是否存活 1 - 运行中 其他 ...

  2. Android几种解析XML方式的比较

    https://blog.csdn.net/isee361820238/article/details/52371342 一.使用SAX解析XML SAX(Simple API for XML) 使用 ...

  3. Java基础再复习(继承、多态、方法内部类**、HashMap用法**、参数传递**)

    ###继承: package com.shiyan; public class Animal { public int legNum; //动物四肢的数量 //类方法 public void bark ...

  4. centos 7上nginx+uwsgi 性能调优

    上一章将nginx +uwsgi搭建起来,将keystone挂载后面.但是发现一个问题,如果http请求达到一定量后,nginx直接返回502.这让需要部署大规模openstack集群的我很是头疼,比 ...

  5. maven maven.compiler.source和maven.compiler.target的坑

    最近建议产品组把jdk 1.7升级到1.8,昨晚开发报了个问题过来,说maven.compiler.source和maven.compiler.target改成1.8之后,编译出来的代码还是1.7,如 ...

  6. easyui以及js前端开发常见问题、用法整理(最重要的样式和图标自定义)

    自定义图标 iconCls 所有属性值枚举: icon-add icon-print icon-mini-add icon-cvs icon-play icon-refresh icon-edit i ...

  7. DevExpress GridControl使用方法总结2

    一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 (1).gridView.AddN ...

  8. (6CBIR模拟问题)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署

    个方面: 最初的图像检索研究主要集中在如何选择合适的全局特征去描述图像内容和采用什么样的相似性度量方法进行图像匹配. 第二个研究热点是基于区域的图像检索方法,其主要思想是图像分割技术提取出图像中的物体 ...

  9. 让InstallShield 2015 Limited Edition for Visual Studio 2015生成的setup.exe双击时以管理员权限运行

    转载:http://blog.csdn.net/zztoll/article/details/52096700 如题,如何让InstallShield 2015 Limited Edition for ...

  10. 【Python56--爬取妹子图】

    爬取网站的思路 第一步:首先分析爬取网站的连接地址特性,发现翻页图片的时候连接:http://www.mmjpg.com/mm/1570  ,http://www.mmjpg.com/mm/1569, ...