Java SE LinkedList的底层实现
关于实现链表的底层原理
链表便于增删,不便于查询
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的底层实现的更多相关文章
- Java 的 LinkedList 的底层数据结构
1. 数据结构--LinkedList源码摘要 public class LinkedList<E> extends AbstractSequentialList<E> imp ...
- Java SE HashMap的底层实现
1.hash散列算法 由于hashmap在存储过程中是数组加链表的存储过程,所以定义数组长度为16(建议是2的n次幂的长度),之后进行每个数组的地址都指向一个链表进行存储 hash表算法可对数组长度l ...
- Java SE教程
第0讲 开山篇 读前介绍:本文中如下文本格式是超链接,可以点击跳转 >>超链接<< 我的学习目标:基础要坚如磐石 代码要十份规范 笔记要认真详实 一.java内容介绍 ...
- Java SE基础知识
Java SE面试题 目录 Java SE基础 基本语法 数据类型 关键字 面向对象 集合 集合类概述 Collection接口 List Set Map Java SE基础 基本语法 数据类型 Ja ...
- Java:基于LinkedList实现栈和队列
1.提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例.由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现. package junit; import java.util. ...
- Java集合---LinkedList源码解析
一.源码解析1. LinkedList类定义2.LinkedList数据结构原理3.私有属性4.构造方法5.元素添加add()及原理6.删除数据remove()7.数据获取get()8.数据复制clo ...
- Java SE 6 新特性: 对脚本语言的支持
2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...
- Java SE 6 新特性: HTTP 增强--转
概述 Java 语言从诞生的那天起,就非常注重网络编程方面的应用.随着互联网应用的飞速发展,Java 的基础类库也不断地对网络相关的 API 进行加强和扩展.在 Java SE 6 当中,围绕着 HT ...
- DynamicMBean(Java SE 6 新特性: JMX 与系统管理)
Dynamic MBean 是一种在运行时定义其管理接口的 MBean.例如,配置 MBean 可以通过解析 XML 文件来确定它所公开的属性名称和类型. 任何实现 DynamicMBean 接口的类 ...
随机推荐
- vue 实现modal
本文只是作为练习弹出框,弹框内部的东西需要进行自定义添加,主要对更新,删除,新建 ,提示四种弹框进行实现,例子中只是简单的组件应用 Modal.vue文件 <template> <d ...
- Golang字符串函数认识(一)
package main import ( "fmt" "strings" "strconv" ) func main(){ //返回字符串 ...
- fjwc2019 D2T1 直径 (构造)
#181. 「2019冬令营提高组」直径 (这题构造题是我考场上唯一一A的题........) 先看这个特殊的Subtask4 Subtask 4(20pts):$\sqrt{1+8k}$ 为整 ...
- Jenkins实现SVN+Maven+Java项目的持续集成
Jenkins 2.46.1 Centos 7.3 JDK 7 安装jdk/maven/svn 在Jenkins所在的Linux机器安装jdk和maven,步骤就不说了,下面是环境变量: export ...
- 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 ...
- 错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 解决方法
晚上花几分钟在windows下测了下pthread的用法,出现错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 ...
- 关于centos7字体缺失导致项目验证码丢失报错500问题
这个问题是这样的,迁移架构的时候项目验证码刷不出来, 页面报错500, 就像下面那样. tomcat报错是数组越界, 看下面 最诡异的是, 开发那边再三确定代码里面没有问题, 于是我试了一下把war包 ...
- [C++ Primer Plus] 第2章、开始学习c++
一.程序清单2.1(代码和书略不一样) #include<iostream> using namespace std;//使用std这个命名空间,才能正确找到cin和cout,如果不使用命 ...
- vi中如何使用cscope来查找函数的定义
答:进入命令行模式输入:cs f g <function_name>
- POJ - 2421 Constructing Roads 【最小生成树Kruscal】
Constructing Roads Description There are N villages, which are numbered from 1 to N, and you should ...