这几天工作量不大,写了一个双向链表的实现。
在linkedlist中,每一个元素所存放的位置都可以理解成一个特殊结构的节点,这个节点分为三个部分:1.前一个节点是谁,自己,后一个节点是谁.
直接上干货
package myLinkedList; public class MyLinkedList { private Node firstNode; private Node lastNode; private int size; /** * @Chunf * add an element with index * @param obj */ public void add(Object obj){ Node n = new Node(); if(firstNode==null){ n.setPrevious(null); n.setObj(obj); n.setNext(null); firstNode = n; lastNode = n; }else{ n.setPrevious(lastNode); n.setNext(null); n.setObj(obj); lastNode.setNext(n); lastNode = n; } size++; } /** *@author Chunf * *return counts of the elements in this collection */ public int size(){ return size; } /** * @Chunf * get an element * @param obj */ public Object get(int index){ if(firstNode==null){ return null; }else{ if(index==0){ return firstNode.getObj(); }else{ Node node = firstNode; Object res = null; for(int i=1;i<=index;i++){ res = node.getNext().getObj(); node = node.getNext(); } return res; } } } public void remove(int index){ Node node = null; if(index==0){ node = firstNode; }else{ Node temp = firstNode; Node res = null; for(int i=1;i<=index;i++){ res = temp.getNext(); temp = temp.getNext(); } node = res; } Node previousNode = node.getPrevious(); Node nextNode = node.getNext(); previousNode.setNext(nextNode); nextNode.setPrevious(previousNode); size--; } /** * * @author Chunf * * @Time 2015年8月25日 */ class Node{ private Node previous; private Object obj; private Node next; public Node getPrevious() { return previous; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public void setPrevious(Node previous) { this.previous = previous; } } }
相关推荐
在实际应用中,双向链表常用于实现高效的迭代器,如Java集合框架中的`LinkedList`类。双向链表也可以作为缓存、队列、栈等数据结构的基础,因为它的特性使得在链表两端进行操作变得简单。 在学习和使用双向链表时,...
- **双向链表**:每个节点都有一个额外的指针指向前面的节点,这样可以从两端进行遍历。 - **循环链表**:最后一个节点的指针指向链表的第一个节点,形成一个闭环。 - **有序链表**:链表中的节点按照某种顺序排列...
在Java中,LinkedList的节点类是Node,它包含了三个字段:data(存储数据)、next(指向下一个节点)和prev(在双向链表中指向前一个节点)。当我们使用LinkedList时,可以通过addFirst()、addLast()、add()、remove...
进一步学习,可以研究双向链表,它允许在节点的前后进行插入和删除,提高了操作的灵活性。循环链表则形成一个闭合的环,可以简化某些循环操作。 总之,链表是数据结构的基础,理解和熟练运用链表对于提升编程技能...
- **类型**:链表可以分为单向链表和双向链表。单向链表中的每个节点只有一个指向后继节点的指针;而双向链表中的节点则有两个指针,一个指向前驱节点,另一个指向后继节点。 2. **链表操作**: - **创建链表**:...
LinkedList则通过双向链表实现,适合频繁的插入和删除,但随机访问较慢。 HashSet和TreeSet实现了Set接口。HashSet基于哈希表,不允许有重复元素,插入和查找速度快;而TreeSet内部使用红黑树,除了保证元素唯一性...
链表有多种类型,如单向链表、双向链表和循环链表。在C/C++中,链表可以通过结构体和指针来实现;在Java中,可以使用LinkedList类;在Python中,可以使用内置的list或自定义类来模拟链表。学习链表的关键在于理解其...
首先,LinkedList是一个实现了List接口的类,它采用双向循环链表实现。这意味着每个节点包含一个数据元素和两个引用,分别指向前一个节点和后一个节点。这种结构使得在链表的任何位置添加、删除元素或访问元素都非常...
6. **LinkedList类**:LinkedList是List接口的另一种实现,它基于双向链表。这种结构使得在链表的开头和结尾添加或删除元素非常高效,但随机访问元素的效率低于ArrayList。 7. **Stack类**:Stack是Vector的一个...
`ArrayList`使用动态数组实现,适合快速随机访问,而`LinkedList`使用双向链表实现,适合频繁的插入和删除操作。 【ArrayList与LinkedList的区别】 - 数据结构:`ArrayList`基于动态数组,`LinkedList`基于链表。 -...
LinkedList基于双向链表,插入和删除效率高但访问速度慢。 **二、JAVA Map接口** Map接口存储键值对,不保证元素的顺序,且不允许键重复。Map接口的方法包括put添加键值对、get获取值、remove移除键值对以及size...
LinkedList通过双向链表实现,适合于频繁的插入和删除操作,但访问速度相对较慢。 Set接口的典型实现有HashSet和TreeSet。HashSet依赖于HashMap,其内部使用哈希表存储元素,不保证元素的顺序,但插入和查找速度快...
LinkedList则不同,它底层采用双向链表结构,每个节点包含数据以及指向前后节点的引用。这种结构使得LinkedList在插入和删除操作上具有优势,因为只需要改变相邻节点的引用即可,时间复杂度为O(1)。但是,由于...
- **LinkedList**: 双向链表实现,插入和删除元素较快,但随机访问较慢。 **4.3 Set** - **HashSet**: 基于哈希表实现,提供较快的添加和查找速度。 - **TreeSet**: 基于红黑树实现,提供排序功能。 - **...
- **ArrayList与LinkedList**:List接口的两种实现,ArrayList基于动态数组,LinkedList基于双向链表。 - **HashSet与TreeSet**:Set接口的实现,HashSet不保证顺序,TreeSet按元素自然顺序排序。 - **HashMap与...
- `LinkedList`实现了双向链表,对于频繁的插入和删除操作更高效。 - `HashSet`不存储重复元素,内部基于哈希表实现,提供快速的查找。 - `TreeSet`基于红黑树,保持元素排序。 5. **多线程**: - Java通过`...
LinkedList基于双向链表实现,链表的插入和删除操作不需要移动元素,只需要改变相邻节点的指针即可,因此在列表中间插入和删除元素的效率较高。但是,它不支持快速的随机访问。和ArrayList一样,LinkedList也不是...
LinkedList是一个双向链表,它的插入和删除操作通常比ArrayList更快,特别是当需要频繁地在列表中间进行操作时。但是,LinkedList的随机访问性能较差,因为访问元素需要从头或尾部开始遍历。 HashSet是一个不允许有...
理解它们的特点和使用场景,如ArrayList的动态扩容、LinkedList的链表操作效率、HashSet的无序唯一性以及HashMap的键值对存储,能提升你在实际开发中的效率。 多线程是Java的一个强项,它支持并发执行任务,提高了...
LinkedList基于双向链表,插入和删除快但访问慢。 2. **Set**: Set接口不包含重复元素,也没有顺序。HashSet是最常用的实现,它使用哈希表来存储元素,不允许有重复。LinkedHashSet则保持了元素的插入顺序,而...