zoukankan      html  css  js  c++  java
  • 持有对象-3

    LinkedList

    LinkedList也像ArrayList一样实现了基本的List接口,但是它执行某些操作(在List的中 间插入和移除)时比ArrayList更高效,但在随机访问操作方面却要逊色些。
    LinkedList还添加了可以使其用作栈、队列或双端队列的方法。
    这些方法中有些彼此之间只是名称有些差异,或者只存在些许差异,以使得这些名字在特定用法的上下文环境中更加适用(特别是在Queue中)。
    1)返回第一个元素
    getFirst和element完全一 样,它们都返回列表的头(第一个元素),而并不移除它,如果List为空,则拋出NoSuchElementException。
    从源码来看:
    public E element() {
            return getFirst();
        }

    peek方法与这两个方式只是稍有差异,它在列表为空时返回null。

    从源码来看
    public E peek() {
            final Node<E> f = first;
            return (f == null) ? null : f.item;
        }

    2)移除元素

    removeFirst,remove,pop 也是完全一样的, 它们移除并返回列表的头,而在列表为空时抛出NoSuchElementException。
    poll稍有差异,它在列表为空时返回null。removeLast移除并返回列表的最后一个元素;他们底层都用的是unlinkFirst()
    来看源码:
    public E removeFirst() {
            final Node<E> f = first;
            if (f == null)
                throw new NoSuchElementException();
            return unlinkFirst(f);
    }

    public E remove() {
            return removeFirst();
    }

    public E pop() {
            return removeFirst();
    }

    public E poll() {
            final Node<E> f = first;
            return (f == null) ? null : unlinkFirst(f);
    }

    3)增加元素

          addFirst与add和addLast相同,它们都将某个元素插入到列表的首(尾)部。
     

    栈-Stack

    LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用。不过,有时一个真正的“栈”更能把事情讲清楚:

     
    public class Stack<T> {
        private LinkedList<T> storage = new LinkedList<T>();
    
        public void push(T v) {
            storage.addFirst(v);
        }
    
        public T peek() {
            return storage.getFirst();
        }
    
        public T pop() {
            return storage.removeFirst();
        }
    
        public boolean empty() {
            return storage.isEmpty();
        }
    
        public String toString() {
            return storage.toString();
        }
    }

    这里通过使用范型,引入了在栈的类定义中最简单的可行示例。类名之后的<T>告诉编译器这将是一个参数化类型,而其中的类型参数,即在类被使用时将会被实际类型替换的参数,就是T。大体上,这个类是在声明 我们在定义一个可以持有T类型对象的Stack。 Stack是 用LinkedList实现的,而LinkedList也被 告知它将持有T类型对象。注意,push接受的是T类型的对象,而peek0和pop0将返回T类型的对象。peek方法将提供栈顶元素,但是并不将其从栈顶移除,而pop将移除并返回栈顶元素

  • 相关阅读:
    SpringBoot(三)——使用Thymeleaf模板
    “Usage of API documented as @since 1.8+”报错的解决办法
    JAVA的多态性
    SQL的JOIN语句
    共享锁和排他锁
    软件工程团队作业---项目选题报告
    结对作业
    PMS---团队展示
    第二次作业——个人项目实战
    第一次作业---准备
  • 原文地址:https://www.cnblogs.com/QianYue111/p/10245127.html
Copyright © 2011-2022 走看看