1.1 LinkedList集合

  • LinkedList:底层数据结构是双链表,查询慢,增删快,线程不安全,效率高。
  • 因为LinkedList底层是链表,所以有了头和尾的概念,就多了一些特有的功能

特有功能:

  • 添加功能:
    public void addFirst(E e)及addLast(E e)
  • 获取功能:
    public E getFirst()及getLast()
  • 删除功能:
    public E removeFirst()及public E removeLast()
package com.shujia.wyh.day19;
import java.util.LinkedList;

public class LinkedListDemo1 {
    public static void main(String[] args) {
        //创建LinkedList集合对象
        LinkedList linkedList = new LinkedList();

        //向集合中添加元素
        linkedList.add("hello");
        linkedList.add("world");
        linkedList.add("java");
        linkedList.add("bigdata");
        linkedList.add("hadoop");
        linkedList.add("hive");
        linkedList.add("spark");

        System.out.println(linkedList);
        System.out.println("====================================");
        //public void addFirst(E e)在该列表开头插入指定的元素。
        linkedList.addFirst("hbase");
        System.out.println(linkedList);
        //public void addLast(E e)将指定的元素追加到此列表的末尾。
        //从效果上来看,和add()方法效果一样
//        linkedList.addLast("sqoop");
//        linkedList.add("sqoop");
        System.out.println(linkedList);

        System.out.println("=====================================");
        //public E getFirst()返回此列表中的第一个元素。
//        Object first = linkedList.getFirst();
//        System.out.println(first);
        Object first = linkedList.get(0);
        System.out.println(first);
        System.out.println(linkedList);
        //public E getLast()返回此列表中的最后一个元素。
//        Object last = linkedList.getLast();
//        System.out.println(last);
        Object last = linkedList.get(linkedList.size() - 1);
        System.out.println(last);
        System.out.println(linkedList);

        System.out.println("====================================");
        //public E removeFirst()从此列表中删除并返回第一个元素。
        Object o = linkedList.removeFirst();
        System.out.println(o);
        System.out.println(linkedList);
        //public E removeLast()从此列表中删除并返回最后一个元素。
        Object o1 = linkedList.removeLast();
        System.out.println(o1);
        System.out.println(linkedList);
        System.out.println("===================================");
        LinkedList list2 = new LinkedList();
        list2.add("flink");
        System.out.println(list2);
//        Object o2 = list2.removeFirst();
//        System.out.println(o2);
//        System.out.println(list2);
        Object o2 = list2.removeLast();
        System.out.println(o2);
        System.out.println(list2);

    }
}

题目:

++请用LinkedList模拟栈数据结构的集合,并测试
栈的特点:先进后出
题目真正的要求是:自己自定义一个类,底层方法实现是LinkedList,调用的方法名是自己定义,调用自己定义的方法来模拟栈数据结构.
++

如果面试遇到这种类似使用某某技术模拟某某数据结构,按照上面的做法0分.

import java.util.LinkedList;
import java.util.ListIterator;
/*
        请用LinkedList模拟栈数据结构的集合,并测试

        栈的特点:先进后出

        题目真正的要求是:自己自定义一个类,底层方法实现是LinkedList,调用的方法名是自己定义,调用自己定义的方法来模拟栈数据结构.
 */
public class LinkedListDemo2 {
    public static void main(String[] args) {
        //创建 ListedList 对象
        LinkedList<String> llist = new LinkedList<String>();
        //像集合中添加元素
        llist.add("hullo");
        llist.add("world");
        llist.add("java");
        llist.add("spark");
        llist.add("flink");
        //创建迭代器对象
        ListIterator<String> stringListIterator = llist.listIterator();
        //遍历集合
        while (stringListIterator.hasNext()) {
            String s = (String)stringListIterator.next();
            System.out.println(s+"========"+s.length());
        }
        //如果面试遇到这种类似使用某某技术模拟某某数据结构,按照上面的做法0分.
    }
}

正确解决办法:

  • 将LinkedList里面的方法封装起来,直接在方法里面创建LinkdeList集合的对象,将其赋值给方法中定义的 linkedList变量 然后再将 LinkedList 中的方法封装成自己的方法:

代码如下:

封装代码

package com.bigdat.java.day20;
import java.util.LinkedList;
public class MyStack {
    //定义 LinkedList 的成员变量
    private LinkedList linkedList;
    //创建 LinkList 的对象,并将其赋值给成员变量
     MyStack() {
        this.linkedList =new LinkedList();
    }
    //封装LinkedList中的addfirst方法。变量名和返回值必须和API中的一致
    public void Add(Object obj) {
        linkedList.addFirst(obj);
    }
    //封装 removeFirst() 方法,将先添加进去的先输出
    public Object myGet(){
        return linkedList.removeFirst();
    }
    //判断集合是否为空,
    public boolean myIsEmpty(){
        return linkedList.isEmpty();
    }
}

测试代码如下:

package com.bigdat.java.day20;
public class MyStackText {
    public static void main(String[] args) {
        MyStack ms = new MyStack();
        ms.Add("hello");
        ms.Add("look");
        ms.Add("see");
        ms.Add("haha");

//        System.out.println(ms.myGet());
//        System.out.println(ms.myGet());
//        System.out.println(ms.myGet());
//        System.out.println(ms.myGet());
        //方法改进
        while(!ms.myIsEmpty()){
            System.out.println(ms.myGet());
        }
    }
}