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());
}
}
}