- 浏览: 347949 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
pacoson:
感谢楼主。请受小生一拜。
ANT预编译JSP -
zhuhongming123:
一楼的同学Lucene4.* 以上的 已经改成了Numeric ...
Lucene日期排序及组合查询 -
ywjk520:
RangeQuery在哪个包里?
Lucene日期排序及组合查询 -
willwen:
有个疑问,楼主,为何初始化bits 从txt读取已有的网址是直 ...
布隆过滤器(Bloom Filter)之java实例 -
yu_226528:
还不如没有呢
jFreeChart 在jsp页上实现简单的折线图、柱状图
LinkedList类里面较重要的方法就是"addBefore(){}"和"private void remove(DNode <T> curr){}"
很多方法都与它俩有关系!!
package LinkedList; import java.util.Iterator; import java.util.ListIterator; import java.util.NoSuchElementException; public class MyLinkedList<T> { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ private DNode<T> header; private int listSize; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public MyLinkedList() { header = new DNode<T>(); listSize = 0; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ private static class DNode<T> { T nodeValue; DNode<T> prev; DNode<T> next; public DNode() { // for header nodeValue = null; prev = this; // left next = this; // right } public DNode(T item) { nodeValue = item; prev = this; next = this; } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public boolean isEmpty() { return (header.prev == header || header.next == header); } public int size() { return listSize; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ private DNode<T> addBefore(DNode<T> curr, T item) { DNode<T> newNode, prevNode; newNode = new DNode<T>(item); prevNode = curr.prev; newNode.prev = prevNode; newNode.next = curr; prevNode.next = newNode; curr.prev = newNode; return newNode; } public boolean add(T item) { addBefore(header, item); listSize++; return true; } public void addFirst(T item) { addBefore(header.next, item); listSize++; } public void addLast(T item) { addBefore(header, item); listSize++; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ private void remove(DNode<T> curr) { if(curr.next == curr) return; DNode<T> prevNode = curr.prev, nextNode = curr.next; prevNode.next = nextNode; nextNode.prev= prevNode; } public boolean remove(Object o) { for(DNode<T> p = header.next; p != header; p = p.next) { if(o.equals(p.nodeValue)) { remove(p); listSize--; return true; } } return false; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public void printList() { for(DNode<T> p = header.next; p != header; p = p.next) System.out.println(p.nodeValue); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ private class MyIterator implements Iterator<T> { public DNode<T> nextNode = header.next; public DNode<T> lastReturned = header; public boolean hasNext() { return nextNode != header; } public T next() { if(nextNode == header) throw new NoSuchElementException(""); lastReturned = nextNode; nextNode = nextNode.next; return lastReturned.nodeValue; } public void remove() { if(lastReturned == header) throw new IllegalStateException(""); MyLinkedList.this.remove(lastReturned); lastReturned = header; listSize--; } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ private class MyListIterator extends MyIterator implements ListIterator<T> { private int nextIndex; MyListIterator(int index) { if(index < 0 || index > listSize) throw new IndexOutOfBoundsException(""); //如果index小于listSize/2,就从表头开始查找定位,否则就从表尾开始查找定位 if(index < (listSize >> 1)) { nextNode = header.next; for(nextIndex = 0; nextIndex < index; nextIndex++) nextNode = nextNode.next; }else { nextNode = header; for(nextIndex = listSize; nextIndex > index; nextIndex--) nextNode = nextNode.prev; } } public boolean hasPrevious() { return nextIndex != 0; //return nextNode.prev != header; } public T previous() { if (nextIndex == 0) throw new NoSuchElementException("no"); lastReturned = nextNode = nextNode.prev; nextIndex--; return lastReturned.nodeValue; } public void remove() { if(lastReturned == header) throw new IllegalStateException(""); MyLinkedList.this.remove(lastReturned); nextIndex--; listSize--; if(lastReturned == nextNode) nextNode = nextNode.next; lastReturned = header; } public void add(T item) { MyLinkedList.this.addBefore(nextNode, item); nextIndex++; listSize++; lastReturned = header; } public void set(T item) { if (lastReturned == header) throw new IllegalStateException(); lastReturned.nodeValue = item; } public int nextIndex() { return nextIndex; } public int previousIndex() { return nextIndex - 1; } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public Iterator<T> iterator() { return new MyIterator(); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public ListIterator<T> listIterator(int index) { return new MyListIterator(index); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public static void main(String[] args) { MyLinkedList<String> t = new MyLinkedList<String>(); t.add("A"); t.add("B"); t.add("C"); t.add("D"); //t.remove("B"); //t.addFirst("AA"); //t.addLast("BB"); //t.printList(); ListIterator<String> it = t.listIterator(t.size()); while(it.hasPrevious()) { System.out.println(it.previous()); // D C B A } } }// MyLinkedList end~
ArrayList 底层数组实现的,当实例化一个ArrayList是也相当实例化了一个数组
所以对元素的随即访问较快,而增加删除操作慢
LinkedList 底层实现是一个双向链表,没一个结点都包含了前一个元素的引用和后一个元素的引用和结点值
所以对元素的随即访问很慢,而增删较快
java 实现链表和c实现一样。 就是指针变成了引用。
发表评论
-
java用绑定变量调用Oracle
2011-03-11 16:59 1085在JAVA中的SQL 语句的编 ... -
java 实现压缩与解压缩ZIP
2010-08-18 10:17 852压缩的 import java.io.BufferedIn ... -
Java中对TreeMap中文排序
2010-08-17 18:20 1889package org.hsyd.test; ... -
java 卸载动态链接库
2010-06-21 11:53 1915import java.lang.reflect.Field; ... -
java数据库连接池实现
2010-02-05 11:21 768.package cc.vicp.eden.plug; ... -
Java NIO原理和使用
2010-01-16 14:29 1647Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知 ... -
java排序全实现
2009-12-17 11:40 9301. package sort; 2. ... -
Java对各种文件的操作
2009-12-12 22:23 989java中提供了io类库,可以轻松的用java实现对文件的各种 ... -
直接由Java获取文件的创建时间
2009-11-11 11:22 3028import java.io.*; public cla ... -
非常实用的myeclipse快捷键
2009-08-13 22:24 1205技巧:取消自动validation validation有一堆 ... -
计算工作日和自然日
2009-06-24 19:21 3333用Java写一个倒计时程序,比如输入一个日期,格式为20090 ... -
文件排序后进行文本复制
2009-06-24 18:48 990现将TEXT1.TXT中的文本内容 复制到TEXT2.TXT中 ... -
getResourceAsStream的用法
2009-06-24 18:28 2593getResourceAsStream 用法大致有以下几种: ... -
将一首古诗竖着排序从右往左读
2009-06-24 17:36 3138import java.util.ArrayList; ... -
计算两个日期之间相差的天数
2009-06-24 16:47 2021程序经过一系列处理,得到两个string类型的时间值,一个值的 ... -
如何得到一年的所有星期二的日期?
2009-06-24 16:42 1445import java.text.DateFormat; ... -
根据格式日期转换
2009-06-24 16:39 910根据一个TimeZone的时间,比如一个“Africa/Acc ... -
当输入一个年月份的时候,输出这个月份的最后一天,比如输入: 2006年5月 就输出5月份的最后一个日
2009-06-24 16:00 1166import java.text.ParseException ... -
读取一个文本文档,例如有1~10行,要求按10~1行的顺序输出.并保存予原文件.
2009-06-24 15:49 1353import java.io.File; import ... -
编写一个辅助小学生学习乘法的程序
2009-06-22 16:39 1625编写一个辅助小学生学习乘法的程序。使用一个Random对象产生 ...
相关推荐
用Java定义一个双向链表,实现链表的基本操作: 初始化、获取头结点、添加新元素、删除链表元素、 获取链表元素、查找链表元素、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空链表。
用java实现双向链表的完整操作,主要用到内部类实现。
JAVA实现双向链表的增删功能的方法 本篇文章主要介绍了JAVA实现双向链表的增删功能的方法,包括了链表的创建、插入节点、删除节点等操作。下面将对相关知识点进行详细解释。 一、链表的基本概念 链表是一种数据...
主要介绍了Java实现双向链表(两个版本)的相关资料,需要的朋友可以参考下
JAVA实现链表_双向链表
本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...
Java 实现双向链表实例详解 Java 实现双向链表实例详解是一种基本的数据结构,在 Java 中 LinkedList 已经实现了这种结构,但是作为开发者,也要拥有自己显示这种结构的能力。双向链表是一种动态的数据结构,它可以...
以下是使用迭代方式实现双向链表反转的Java代码: ```java public void reverse() { if (head == null || head.next == null) { return; } Node current = head; Node previous = null; while (current != ...
数组、单链表和双链表介绍以及双向链表的C、C++和Java实现 在计算机科学中,数组、单链表和双链表是最基本的数据结构。它们都是线性表的实现方式,具有相同类型的n(n≥0)个数据元素组成的有限序列。 数组 数组是...
在Java编程中,有序非循环双向链表是一种重要的数据结构,它在许多复杂的数据操作和算法实现中扮演着核心角色。有序意味着链表中的元素按照特定的顺序排列,非循环则表示链表的首节点和尾节点之间没有链接,使得遍历...
使用 Eclipse、Maven、JUnit、SonarQube 和 JaCoCo 使用 Java 实现双向链表。 嵌套类摘要 private class DLNode 现场总结 - DLNode<T> first - DLNode<T> last 构造函数总结 + DLList() 方法总结 + boolean ...
在本文中,我们将深入探讨...这个例子展示了如何利用Java实现双向链表的高效拆分,对于理解和操作链表数据结构非常有帮助。通过这种方式,我们可以解决许多其他涉及链表操作的算法问题,例如合并排序链表或链表的反转。
下面我们将详细讲解如何实现一个自定义的Java双向链表,并参考提供的`LinkNode.java`文件来理解其内部机制。 首先,我们需要定义一个表示链表节点的类`LinkNode`。这个类通常包含三个属性:存储数据的`data`字段、...
本主题主要关注两种特殊类型的链表——双端链表(Double-ended LinkedList)和双向链表(Bidirectional LinkedList),并以Java语言实现为例进行讲解。 双端链表,也称为双链表,是一种允许在链表的两端进行插入和...
本实例聚焦于Java中的一个重要数据结构——双向链表,它在很多场景下都有着广泛的应用。双向链表与单链表相比,其独特之处在于每个节点不仅包含指向下一个节点的指针,还包含指向前一个节点的指针,这使得在链表中的...
在这个话题中,我们将深入探讨两种基本的线性数据结构——单链表和双向链表,并通过Java语言来实现它们。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两个部分:数据域和指针域。数据域存储实际的数据...
在本文中,我们将深入探讨如何使用Java编程语言实现一个高效的双向链表数据结构,并通过测试用例进行验证。首先,让我们了解双向链表的基本概念。 双向链表是一种线性数据结构,其中每个节点包含两个指针,分别指向...
相信大家都明白 LinkedList 是基于双向链表而实现的,本篇文章主要讲解一下双向链表的实现,并且我们参考 LinkedList 自己实现一个单链表尝试一下。 什么是链表? 简单的来讲一下什么是链表:首先链表是一种线性的...
在实际开发中,Java的`java.util.LinkedList`类已经为我们提供了内置的双向链表实现。然而,理解如何自定义实现双向链表有助于深入理解数据结构和算法,对于提升编程技能和解决问题的能力大有裨益。