关于实现链表的底层原理

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

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. vue 实现modal

    本文只是作为练习弹出框,弹框内部的东西需要进行自定义添加,主要对更新,删除,新建 ,提示四种弹框进行实现,例子中只是简单的组件应用 Modal.vue文件 <template> <d ...

  2. Golang字符串函数认识(一)

    package main import ( "fmt" "strings" "strconv" ) func main(){ //返回字符串 ...

  3. fjwc2019 D2T1 直径 (构造)

    #181. 「2019冬令营提高组」直径 (这题构造题是我考场上唯一一A的题........) 先看这个特殊的Subtask4 Subtask 4(20pts):$\sqrt{1+8k}$​​​ 为整 ...

  4. Jenkins实现SVN+Maven+Java项目的持续集成

    Jenkins 2.46.1 Centos 7.3 JDK 7 安装jdk/maven/svn 在Jenkins所在的Linux机器安装jdk和maven,步骤就不说了,下面是环境变量: export ...

  5. cannot_delete_plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbit@iZbp1iiexwyqe7tpjigcg9Z-plugins-expand"

    [root@iZbp1iiexwyqe7tpjigcg9Z rabbitmq]# cat startup_err /usr/lib/rabbitmq/bin/rabbitmq-env: line 91 ...

  6. 错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 解决方法

    晚上花几分钟在windows下测了下pthread的用法,出现错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 ...

  7. 关于centos7字体缺失导致项目验证码丢失报错500问题

    这个问题是这样的,迁移架构的时候项目验证码刷不出来, 页面报错500, 就像下面那样. tomcat报错是数组越界, 看下面 最诡异的是, 开发那边再三确定代码里面没有问题, 于是我试了一下把war包 ...

  8. [C++ Primer Plus] 第2章、开始学习c++

    一.程序清单2.1(代码和书略不一样) #include<iostream> using namespace std;//使用std这个命名空间,才能正确找到cin和cout,如果不使用命 ...

  9. vi中如何使用cscope来查找函数的定义

    答:进入命令行模式输入:cs f g <function_name>

  10. POJ - 2421 Constructing Roads 【最小生成树Kruscal】

    Constructing Roads Description There are N villages, which are numbered from 1 to N, and you should ...