JAVA深化篇_11——Vector,LinkedList容器的基本使用

Vector容器的基本使用

Vector底层是用数组实现的,相关的方法都加了同步检查,因此“线程安全,效率低”。 比如,indexOf方法就增加了synchronized同步标记。

Vector的使用

Vector的使用与ArrayList是相同的,因为他们都实现了List接口,对List接口中的抽象方法做了具体实现。

public class VectorTest {
  public static void main(String[] args) {


    //实例化Vector
    List<String> v = new Vector<>();
    v.add("a");
    v.add("b");
    v.add("a");


    for(int i=0;i<v.size();i++){
      System.out.println(v.get(i));
     }
    System.out.println("----------------------");
    for(String str:v){
      System.out.println(str);
     }
   }
}


LinkedList容器介绍

LinkedList底层用双向链表实现的存储。特点:查询效率低,增删效率高,线程不安全。

双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向前一个节点和后一个节点。 所以,从双向链表中的任意一个节点开始,都可以很方便地找到所有节点。

LinkedList的存储结构图

每个节点都应该有3部分内容:

class Node<E> {
        Node<E> previous;   //前一个节点
        E element;     //本节点保存的数据
        Node<E> next;        //后一个节点
}

List实现类的选用规则

如何选用ArrayList、LinkedList、Vector?

  1. 需要线程安全时,用Vector。
  2. 不存在线程安全问题时,并且查找较多用ArrayList(一般使用它)
  3. 不存在线程安全问题时,增加或删除元素较多用LinkedList

LinkedList容器的使用(List标准)

LinkedList实现了List接口,所以LinkedList是具备List的存储特征的==(有序,元素有重复)。==

public class LinkedListTest {
  public static void main(String[] args) {
    //实例化LinkedList容器
    List<String> list = new LinkedList<>();


    //添加元素
    boolean a = list.add("a");
    boolean b = list.add("b");
    boolean c = list.add("c");
    list.add(3,"a");
    System.out.println(a+"\t"+b+"\t"+c);


    for(int i=0;i<list.size();i++){
      System.out.println(list.get(i));
     }
   }
}

LinkedList容器的使用(非List标准)

方法说明
void addFirst(E e)将指定元素插入到开头
void addLast(E e)将指定元素插入到结尾
getFirst()返回此链表的第一个元素
getLast()返回此链表的最后一个元素
removeFirst()移除此链表中的第一个元素,并返回这个元素
removeLast()移除此链表中的最后一个元素,并返回这个元素
E pop()从此链表所表示的堆栈处弹出一个元素,等效于removeFirst
void push(E e)将元素推入此链表所表示的堆栈 这个等效于addFisrt(E e)
public class LinkedListTest2 {
  public static void main(String[] args) {
    System.out.println("-------LinkedList-------------");
    //将指定元素插入到链表开头
    LinkedList<String> linkedList1 = new LinkedList<>();
    linkedList1.addFirst("a");
    linkedList1.addFirst("b");
    linkedList1.addFirst("c");
    for (String str:linkedList1){
      System.out.println(str);
     }
    System.out.println("----------------------");
    //将指定元素插入到链表结尾
    LinkedList<String> linkedList = new LinkedList<>();
    linkedList.addLast("a");
    linkedList.addLast("b");
    linkedList.addLast("c");
    for (String str:linkedList){
      System.out.println(str);
     }


    System.out.println("---------------------------");
    //返回此链表的第一个元素
    System.out.println(linkedList.getFirst());
    //返回此链表的最后一个元素
    System.out.println(linkedList.getLast());


    System.out.println("-----------------------");
    //移除此链表中的第一个元素,并返回这个元素
    linkedList.removeFirst();
    //移除此链表中的最后一个元素,并返回这个元素
    linkedList.removeLast();
    for (String str:linkedList){
      System.out.println(str);
     }


    System.out.println("-----------------------");
    linkedList.addLast("c");


    //从此链表所表示的堆栈处弹出一个元素,等效于removeFirst
    linkedList.pop();
    for (String str:linkedList){
      System.out.println(str);
     }
    System.out.println("-------------------");
    //将元素推入此链表所表示的堆栈  这个等效于addFisrt(E e)
    linkedList.push("h");
    for (String str:linkedList){
      System.out.println(str);
     }
   }
}

posted @ 2023-10-17 09:38  Gjq-  阅读(3)  评论(0编辑  收藏  举报  来源