JAVA类库LinkList的基本实现
写完调试了好久,边界不优点理,具体的请看JDK类库,下面仅仅是基本实现:
import java.util.Iterator; /**
* 类名:MyLinkedList 说明:LinkedList的基本实现
*/
public class MyLinkedList<AnyType> implements Iterable {
private int theSize = 0;
private int modCount = 0;
private Node<AnyType> beginMarker;
private Node<AnyType> endMarker; private static class Node<AnyType> {
public Node(AnyType data, Node<AnyType> prev, Node<AnyType> next) {
this.data = data;
this.prev = prev;
this.next = next;
} public AnyType data;
public Node<AnyType> prev;
public Node<AnyType> next;
} public MyLinkedList() {
clear();
} public void clear() {
beginMarker = new Node<AnyType>(null, null, null);
endMarker = new Node<AnyType>(null, beginMarker, null);
beginMarker.next = endMarker; theSize = 0;
modCount++;
} public boolean isEmpty() {
return theSize == 0;
} public int size() {
return theSize;
} public boolean add(AnyType x) {
add(theSize, x);
return true;
} public void add(int index, AnyType x) {
addBefore(getNode(index), x);
} public AnyType get(int index) {
return getNode(index).data;
} private Node<AnyType> getNode(int index) {
if (index < 0 || index > theSize)
throw new IndexOutOfBoundsException();
Node<AnyType> p;
if (index < size() / 2) {
p = beginMarker.next;
for (int i = 0; i < index; i++) {
p = p.next;
}
} else {
p = endMarker;
for (int i = theSize; i > index; i--)
p = p.prev;
}
return p;
} private void addBefore(Node<AnyType> p, AnyType x) {
Node<AnyType> newNode = new Node(x, p.prev, p);
newNode.prev.next = newNode;
p.prev = newNode;
theSize++;
modCount++;
} private AnyType remove(Node<AnyType> p) {
AnyType removed = p.data;
p.prev.next = p.next;
p.next.prev = p.prev;
theSize--;
modCount++;
return removed;
} public AnyType set(int index, AnyType x) {
AnyType old = getNode(index).data;
getNode(index).data = x;
return old;
} public AnyType remove(int index) {
return remove(getNode(index));
} @Override
public Iterator iterator() {
// TODO Auto-generated method stub
return new Iterator() {//匿名内部类实现,jdk里是返回又一次写的一个private类。 private Node<AnyType> current = beginMarker.next;
private int expectedModCount = modCount;
private boolean okToRemove = false; public boolean hasNext() {
return current != endMarker;
} public AnyType next() {
if (modCount != expectedModCount) {
throw new java.util.ConcurrentModificationException();
}
if (!hasNext())
throw new java.util.NoSuchElementException();
AnyType d = current.data;
current = current.next;
okToRemove = true;
return d;
} public void remove() {
if (modCount != expectedModCount) {
throw new java.util.ConcurrentModificationException();
}
if (!okToRemove)
throw new IllegalStateException();
MyLinkedList.this.remove(current.prev);
okToRemove = false;
expectedModCount++;
} }; } public String toString() {
String s = new String();
for (int i = 0; i < theSize; i++)
s += get(i) + " ";
return s; } /**
* 方法名:MyLinkedList.java 说明:測试
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyLinkedList<Integer> list = new MyLinkedList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
System.out.println(list);
list.remove(1);
System.out.println(list);
list.set(1, 2);
System.out.println(list);
Iterator ite = list.iterator();
while (ite.hasNext()) {
System.out.println(ite.next() + " ");
}
}
}
JAVA类库LinkList的基本实现的更多相关文章
- Java 类库和常用类库
Java 类库概念: Java 的应用程序接口 (API) 以包的形式来组织,每个包提供了大量的相关类.接口和异常处理类,这些包的集合就是 Java 的类库 包名以 Java 开始的包是 Java 核 ...
- [Liferay6.2]启动Tomcat提示APR不能在java类库路径中被找到的解决办法
问题描述 启动liferay之后,在控制台中打印出会打印出以下信息: 信息: The APR based Apache Tomcat Native library which allows optim ...
- 介绍4款json的java类库 及 其性能测试
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Lan ...
- 关于ECharts Java类库的一个jquery插件
在项目中开发图表功能时用到了Echars和一个关于Echars的java类库(http://git.oschina.net/free/ECharts).这个类库主要目的是方便在Java中构造EChar ...
- java类库
Java的应用程序接口(API)以包的形式来组织,每个包提供大量的相关类.接口和异常处理类,这些包的集合就是Java的类库. Java类库可以分为两种 包名以java开始的包是Java核心包(Java ...
- Effective Java 第三版——59. 熟悉并使用Java类库
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- 词典的实现(3)--使用JAVA类库ArrayList实现Map数据结构
1,在词典的实现(2)-借助顺序表(数组)实现词典文章中使用了自定义的数组代替ArrayList,并实现了Map数据结构的基本功能.而借助JAVA类库ArrayList类的一些方法可以更加容易地实现M ...
- 使用Java类库POI生成简易的Excel报表
使用Java类库POI生成简易的Excel报表 1.需求 1.数据库生成报表需要转义其中字段的信息.比如 1,有效 2.无效等 2.日期格式的自数据需要转义其格式. 3.标题的格式和数据的格式需要分别 ...
- Java类库和常用类库介绍
Java 类库概念: Java 的应用程序接口 (API) 以包的形式来组织,每个包提供了大量的相关类.接口和异常处理类,这些包的集合就是 Java 的类库 包名以 Java 开始的包是 Java 核 ...
随机推荐
- yii2.0 利用Excel类做导入导出
1.在 common 目录下 创建一个 components 将 Classes目录(改名为PHPExcel)和PHPExcel.php 放在新创建的目录下.再在 components 下创建一个Co ...
- Spring Boot基础教程》 第1节工具的安装和使用
<Spring Boot基础教程> 第1节 工具的安装和使用 Spring Boot文档 https://qbgbook.gitbooks.io/spring-boot-reference ...
- 锐捷SNMp注意:
http://www.ruijie.com.cn/fw/wt/18855 1)设备名称.运行时间.sysOID.设备描述.联系人.设备位置:分别来自RFC-1213-MIB的system组中的sysN ...
- 作为一个程序员怎么通过android开发赚钱
上面是一个程序员通过Android开发每天的收入,信则有! 自己学安卓差不多,有一年了.我本来是从事javaweb开发的,可能学习安卓上手会快点.其实安卓没有那难 .首先开发安卓程序,要有一个,开 ...
- Memcached 集群环境Java客户端
Memcached 集群环境Java客户端 学习了: http://blog.csdn.net/zhouzhiwengang/article/details/53154112 http://guazi ...
- CSS中的相关概念
CSS的几个概念: 包括块:一个元素的"布局上下文".对于正常的HTML文本流中的一个元素,包括块由近期的块级祖先框.表单元格或行内块祖先框的内容边界(content edge)构 ...
- CodeForces 550B Preparing Olympiad(DFS回溯+暴力枚举)
[题目链接]:click here~~ [题目大意] 一组题目的数目(n<=15),每一个题目有对应的难度,问你选择一定的题目(大于r个且小于l个)且选择后的题目里最小难度与最大难度差不小于x, ...
- 如何在阿里云服务器里配置iis 搭建web服务
IIS,互联网信息服务,一种Web服务组件,利用它,我们可以打开asp.php这些搭建网页所用的文件. 工具/原料 域名 服务器 方法/步骤 登录服务器. 点击开始—>服务器 ...
- java9新特性-18-统一的JVM日志系统
1.官方Feature 158: Unified JVM Logging 271: Unified GC Logging 2.使用说明 日志是解决问题的唯一有效途径:曾经很难知道导致JVM性能问题和导 ...
- 关于node的聊天室错误
Deprecationwarning:process,EventEmitter is deprecated use require ('events')instead 关于node的聊天室错误 > ...