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?
- 需要线程安全时,用Vector。
 - 不存在线程安全问题时,并且查找较多用ArrayList(一般使用它)
 - 不存在线程安全问题时,增加或删除元素较多用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);
     }
   }
}
                
                    
                
                
            
        
浙公网安备 33010602011771号