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 接口的类 ...
随机推荐
- 用WPE+CCproxy+自动代理截取安卓游戏封包
wpe三件套:https://pan.baidu.com/s/19gI2GPZ0iuu4wpKljCOn4A 用WPE+CCproxy+自动代理截取安卓游戏封包>>
- Docker学习笔记之Copy on Write机制
0x00 概述 Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新 ...
- mysql库、表、索引
创建和删除数据库,同一个数据库下的不同表可以采用不同的引擎 mysql> create database oldboy default character set utf8 collate ut ...
- P1288 取数游戏II
luogu原题 最近刚学了博弈论,拿来练练手qwq 其实和数值的大小并没有关系 我们用N/P态来表示必胜/必败状态 先在草稿纸上探究硬币♦在最左侧(其实左右侧是等价的)的一条长链的N/P态,设链长为n ...
- 点击button后刷新了页面
今天遇到一个特别奇怪的事,在页面中使用button标签,添加了点击事件onclic,点击的时候倒是执行了绑定的方法,但页面被刷新了! 什么鬼?我没与提交表单啊! 原来,button默认具有提交表单的动 ...
- 解决vi删除键和方向键奇怪的问题
sudo vi /etc/vim/vimrc.tiny 把 改为
- Django框架 (一) 虚拟环境配置及简单使用
虚拟环境 什么是虚拟环境 对真实的python解释器的一个拷贝版本 是事实有效的,可以独立存在运行解释python代码 可以在计算机上拷贝多个虚拟环境 为什么要使用虚拟环境 保证真实环境的纯净性 框架 ...
- 三元运算符代替if-else
main(List<String> args) { int age = 60; String status = age < 50 ? "Still young" ...
- Spring与MyBatis面试
Spring: https://www.cnblogs.com/wang-meng/p/5701982.html https://www.cnblogs.com/liangyihui/p/591777 ...
- 【安装】Redis4.0.10在Linux环境搭建
1.下载Redis后上传到指定目录 2.解压 tar -zxvf redis-4.0.10.tar.gz 3.进入加压后的目录并编译 cd redis-4.0.10 make 4.进入src目录安装 ...