`

集合框架--双向链表的模拟实现

阅读更多

Java中的鏈表,分為三種:

      1.單向鏈表,由一個節點元素,可以找到相鄰的下一個節點元素.

      2.雙向鏈表,由一個節點元素,可以找到其相鄰的前/后節點元素.

      3.循環鏈表,由一個節點元素,可以找到其相鄰的前/后節點元素,由最后一個節點元素可以找到第一個節點元素.

有關Java的集合框架的相關知識,請參考 Java API,此處僅用示例來模擬集合框架中[雙向鏈表] 的實現.

 

1. 定義一個節點類

 

package collection;

public class Node {
	//下一個節點
	private Node next;
	//前一個節點
	private Node prev;
	//節點中的數據
	private Object data;

	public Node getNext() {
		return next;
	}

	public void setNext(Node next) {
		this.next = next;
	}

	public Node getPrev() {
		return prev;
	}

	public void setPrev(Node prev) {
		this.prev = prev;
	}

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}

}

 

2. 定義一個鏈表類

 

package collection;

public class LinkedNode {
	
	//首節點
	private Node firstNode = null;
	//節點的長度
	private int size = 0;

	//添加數據和節點
	public void put(Node node, Object data) {
		//將數據存入節點中
		node.setData(data);
		//設置節點的位置
		if (null == firstNode) {
			firstNode = node;
		} else {
			// 查找最后一个节点
			Node lastNode = firstNode;
			//
			while (null != lastNode.getNext()) {
				lastNode = lastNode.getNext();
			}
			//設置下一個節點
			lastNode.setNext(node);
			//設置前一個節點
			node.setPrev(lastNode);
		}
		size++;
	}

	//獲取指定位置的節點對象
	public Node get(int index) {
		Node node = firstNode;
		//
		if (index != 0) {
			do {
				node = node.getNext();
			} while (--index > 0);
		}
		return node;
	}

	//獲取節點長度
	public int size() {
		return size;
	}
}
 

3. 新建一個測試類

 

package collection;

public class LinkedListTest {
	public static void main(String[] args) {
		LinkedNode ln = new LinkedNode();
		//定義節點
		Node n1 = new Node();
		Node n2 = new Node();
		Node n3 = new Node();
		Node n4 = new Node();
		Node n5 = new Node();
		Node n6 = new Node();
		Node n7 = new Node();
		Node n8 = new Node();
		Node n9 = new Node();
		//往節點中存入數據
		ln.put(n1, "aa");
		ln.put(n2, "bb");
		ln.put(n3, "cc");
		ln.put(n4, "dd");
		ln.put(n5, "ee");
		ln.put(n6, "ff");
		ln.put(n7, "gg");
		ln.put(n8, "hh");
		ln.put(n9, "ii");
		
		Node n = ln.get(3);
		//當前的節點
		System.out.println("當前節點中數據:"+n.getData());

		//前一個節點
		Node p = n.getPrev();
		System.out.println("當前節點的前一個節點中數據:"+p.getData());

		//后一個節點
		Node next = n.getNext();
		System.out.println("當前節點的后一個節點中數據:"+next.getData());
	}
}
 

4. 運行結果如下

 

 

 

 

 

0
1
分享到:
评论

相关推荐

    数据结构-双向链表

    双向链表在很多场景下都有应用,如LRU缓存淘汰策略、实现高效有序集合(如跳表)、模拟浏览器历史记录等。理解并熟练掌握双向链表的原理和操作,对于提升编程能力,特别是数据结构和算法的理解,有着极大的帮助。 ...

    java集合框架

    `LinkedList` 也是 `List` 接口的一种实现,它使用双向链表来存储元素。这使得插入和删除操作变得非常高效,但随机访问元素则相对较慢。 `LinkedList` 可以被用来实现栈和队列的功能。例如,可以使用 `addFirst()` ...

    集合的应用——利用LinkedList模拟进栈出栈操作.zip

    LinkedList是一个双向链表,它支持快速的元素插入和删除,这使得它成为实现栈功能的理想选择。 首先,`HashtableDemo1.java`可能是一个示例代码,演示了如何使用Java的Hashtable类。Hashtable是一个同步的键值对...

    JAVA 面向对象程序设计第7章 集合.pptx

    LinkedList则基于双向链表,适合频繁的插入和删除操作。 7.1.1 Java 集合体系概述 - Collection接口常用方法:add(), addAll(), clear(), contains(), isEmpty(), iterator(), remove(), size()和toArray()等,...

    Java容器框架 collection集合

    - **LinkedList**:基于双向链表实现,适合频繁的插入和删除操作。 - **Vector**:类似于 `ArrayList`,但它是线程安全的。 - **Stack**:继承自 `Vector`,模拟栈的行为,支持后进先出的操作。 - **核心方法**...

    大公司最喜欢问的Java集合类面试题

    Java集合框架是Java编程语言中的一个核心组成部分,它为数据结构和对象的存储、管理和操作提供了统一的接口和实现。在面试中,尤其对于大型公司,深入理解Java集合类是评估开发者技能的关键指标。以下是一些大公司常...

    Java集合面试问题

    - **LinkedList**:双向链表实现,插入和删除操作更快。 - **Vector**:与ArrayList类似,但它是线程安全的。 - **Set**:不允许重复元素的无序集合。 - **HashSet**:底层使用哈希表实现,不保证元素的顺序。 ...

    java集合与映射(牛)

    - **LinkedList**:双向链表实现的List接口,适合频繁插入删除操作。 - **Vector**:与ArrayList类似,但线程安全,效率较低。 - **Stack**:继承自Vector的一个特殊类,实现了后进先出(LIFO)的数据结构,主要...

    兰州大学java实验9

    ArrayList基于动态数组,提供快速随机访问,而LinkedList通过双向链表实现,插入和删除操作效率较高。在实验中,我们可能会涉及到向List中添加元素、排序以及遍历等操作。 Set接口则不允许元素重复,HashSet和...

    Java集合类详解总结

    - `LinkedList`:双向链表实现,适合频繁的插入和删除操作,线程不安全。 - `Vector`:与`ArrayList`类似,但线程安全,性能略低。 - `Stack`:基于`Vector`的后进先出(LIFO)数据结构,继承自`Vector`。 #### Set...

    集合与常见的实用类

    - `LinkedList`:基于双向链表的数据结构,适合频繁进行插入和删除操作。 - `HashSet`:不保证集合中元素的顺序,适合快速查找。 - `TreeSet`:基于红黑树的数据结构,可以保持集合中的元素处于排序状态。 #### ...

    单值类型集合的异同.docx

    - `LinkedList`:基于双向链表实现,适合频繁插入和删除操作。 - 支持默认构造方法和将现有集合转换为`LinkedList`的方法。 - `Stack`:基于`Vector`实现,模拟栈的基本操作,如`push`和`pop`。 #### Set详解 `...

    java基础之集合面试题共4页.pdf.zip

    LinkedList则通过双向链表实现,插入和删除速度快,但随机访问性能较差。 2. **HashSet和TreeSet**:HashSet基于HashMap实现,存储无序、不重复的元素,查找速度快。TreeSet由TreeMap支撑,保持元素排序,可以是...

    真实模拟面试官面试流程.pdf

    - `LinkedList`: 基于双向链表实现,不支持随机访问。 - **性能**: - `ArrayList`: 查询快,插入和删除慢。 - `LinkedList`: 查询慢,插入和删除快。 - **空间消耗**: - `ArrayList`: 由于需要预留额外空间以备...

    九阳真经-java基础面试.docx

    - **LinkedList**:基于双向链表实现,支持快速插入和删除,但随机访问速度慢。可以被用作堆栈或队列。 - **ArrayList**:基于动态增长的数组实现,查询速度快,但插入和删除操作相对慢。使用`Collections....

    实验05 集合类与泛型 实验报告.docx

    2. **LinkedList**:基于双向链表实现的集合类,插入和删除元素速度快,但访问元素的效率相对较低。实验中同样用于存储Product对象,但未展示其特有的操作。 3. **TreeSet**:实现了SortedSet接口的集合类,内部...

    java常用的几种集合.doc

    LinkedList基于双向链表实现,对于中间位置的插入和删除操作效率较高,但遍历速度慢于ArrayList。 **Map映射** Map接口是一个键值对(Key-Value)存储的集合,每个键都是唯一的,可以对应一个或多个值。Map接口的...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    主要实现有`ArrayList`(基于数组)、`LinkedList`(基于双向链表)。 - **Set**:不允许重复元素的集合。主要实现有`HashSet`(基于哈希表)、`TreeSet`(基于红黑树)。 - **接口与实现**: - `List`接口的主要...

    数据结构与算法(JAVA语言版).

    - **双向链表**:探讨双向链表的结构及其在实际应用中的优势。 - **线性表的单链表实现**:详细说明如何使用单链表来实现线性表。 - **两种实现的对比** - **基于时间的比较**:分析顺序表和链表在不同操作下的...

    Java理论复习

    - `LinkedList`:基于双向链表实现的列表,适合频繁插入和删除操作。 - `Set`:不允许重复元素的集合。 - `HashSet`:基于哈希表实现的集合,提供了良好的性能。 - `TreeSet`:基于红黑树实现的集合,支持排序。...

Global site tag (gtag.js) - Google Analytics