java自己实现linkedlist_自己根据java的LinkedList源码编写的一个简单的LinkedList实现...

 2023-09-19 阅读 26 评论 0

摘要:自己实现了一个简单的LinkedList/*** Create by andy on 2018-07-03 11:44* 根据 {@link java.util.LinkedList}源码 写了一个简单的实现,方便理解设计流程java里面LinkedList,* 该类是线程不安全的*/public class FrameLinkedList {private Node first;private N

自己实现了一个简单的LinkedList

/**

* Create by andy on 2018-07-03 11:44

* 根据 {@link java.util.LinkedList}源码 写了一个简单的实现,方便理解设计流程

java里面LinkedList,* 该类是线程不安全的

*/

public class FrameLinkedList {

private Node first;

private Node last;

synchronizedlist,private int size;

public int getSize() {

return size;

}

public E getFirst() {

java implements。if (first == null)

return null;

return first.item;

}

public E getLast() {

java中arraylist?if (last == null)

return null;

return last.item;

}

/**

map java?* 根据元素位置取元素的值

* 从这个例子中就可以看出来,为什么LinkedList获取元素比较慢,因为每次取出元素都有进行一次循环!!!!

*

* @param index

* @return

java list遍历。*/

public E get(int index) {

if (index < 0)

throw new IllegalArgumentException("参数不能小于0");

if (index >= size)

java treemap,throw new IllegalArgumentException("参数太大了,当前集合最大长度为:" + size);

//如果索引小于当前元素个数的一半,就从头部开始循环,否则从尾部开始循环

Node node = first;

if (index < size >> 1) {

//把头给节点,便于下面递归循环

java runnable。for (int i = 0; i < index; i++) {

node = node.next;

}

} else {

//把尾给节点,便于下面递归循环

JAVAlist?node = last;

for (int i = size - 1; i > index; i--) {

node = node.prev;

}

}

java list排序、return node.item;

}

public void add(E e) {

if (size == 0) {

//第一次添加对象

linkedlist和arraylist有什么区别?Node curr = new Node<>(e, null, null);

curr.item = e; //当前对象

first = curr;

last = curr;

} else {

Node curr = new Node<>(e, last, null);

last.next = curr;

last = curr;

}

size++;

}

public boolean remove(E e) {

if (size == 0) return false;

//分两种来处理防止e为null的时候出现空指针异常

if (e == null) {

for (Node n = first; n != null; n = n.next) {

if (n.item == null) {

remove(n);

return true;

}

}

} else {

for (Node n = first; n != null; n = n.next) {

if (e.equals(n.item)) {

remove(n);

return true;

}

}

}

return false;

}

private void remove(Node node) {

Node prev = node.prev;

Node next = node.next;

if (prev == null) {

//移除的是第一个

node.next = null;

next.prev = null;

first = next;

} else if (next == null) {

//移除的是最后一个

node.prev = null;

prev.next = null;

last = prev;

} else {

//移除的是中间

node.prev = null;

node.next = null;

prev.next = next;

next.prev = prev;

}

node.item = null; //便于回收item

size--;

}

private static class Node {

E item; //当前对象

Node prev; //上一个对象的Node

Node next; //下一个对象的Node

Node(E item, Node prev, Node next) {

this.item = item;

this.prev = prev;

this.next = next;

}

}

public static void main(String[] args) {

FrameLinkedList list = new FrameLinkedList<>();

list.add("a1");

list.add("a2");

list.add("a3");

list.add("a4");

list.add("a5");

for (int i = 0; i < list.getSize(); i++) {

System.out.println(list.get(i));

}

System.out.println("-------");

list.remove(list.get(4));

for (int i = 0; i < list.getSize(); i++) {

System.out.println(list.get(i));

}

}

}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/77564.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息