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 接口的类 ...
随机推荐
- Powerpoint 演示时定时提醒工具
经常碰到这样的场景,规定的演讲报告时间所剩无几,甚至是已经超时,但演讲者并不知情,做为主持人只能从旁边轻轻的善意的提醒,但有时演讲者会没注意到主持人的提醒... 这里要介绍的就是这样一款用于提醒演讲者 ...
- SpringMVC实现 MultipartFile 文件上传
1. Maven 工程引入所需要的依赖包 2. 页面需要开放多媒体标签 3. 配置文件上传试图解析器 4. 接收图片信息,通过 IO 流写入磁盘(调用解析其中的方法即可) 如下: 1.1 引入所依赖的 ...
- Spring Boot 实现RESTful webservice服务端示例
1.Spring Boot configurations application.yml spring: profiles: active: dev mvc: favicon: enabled: fa ...
- Source Insight 如何将script等文件加入
点击菜单栏Options -> Document Options , 然后再弹出的对话框中找到File filter,文件过滤的设置,里面肯能有*.c;*.h 你在后面添加Makefile,注意 ...
- 【javascript】对原型对象、原型链的理解
原型对象,原型链这些知识属于基础类知识.但是平时开发过程中也很少用到. 看网上的意思,原型链用于es5开发场景下的继承.es6有了类语法糖之后,就自带继承了. 通过理解,个人画了一张原型链解构的关系图 ...
- ES6知识整理(6)--Symbol函数
(文章会同步到博客园,技术类文章还是该让搜索引擎察觉比较好) symbol是js的第7种数据类型: 7种分别是:undefined.null.boolean(布尔).string(字符串).numbe ...
- python的ws库功能,实时获取服务器ws协议返回的数据
# -*- coding:utf-8 -*- ''' 模块下载,帮助地址:https://github.com/liris/websocket-client#readme 模块:websocket-c ...
- Spring Boot 2(一):Spring Boot 2.0新特性
Spring Boot 2(一):Spring Boot 2.0新特性 Spring Boot依赖于Spring,而Spring Cloud又依赖于Spring Boot,因此Spring Boot2 ...
- DBeaver连接Oracle11g数据库
DBeaver连接Oracle11g数据库 一.准备 (1)dbeaver管理软件 (2)远程连接数据库地址.用户名秘密等 (3)Oracle驱动:ojdbc6.jar工具包 下载地址:https:/ ...
- kali安装搜狗输入法
安装步骤 依赖1: apt-get install fcitx 依赖2: apt-get install fcitx-libs-qt 重建: apt-get --fix-broken install ...