熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

使用Lists

2022-06-13   來源: JSP教程 

  

  List(接口) 順序是List最重要的特性它可保證元素按照規定的順序排列List為Collection添加了大量方法以便我們在List中部插入和刪除元素(只推薦對LinkedList這樣做)List也會生成一個ListIterator(列表反復器)利用它可在一個列表裡朝兩個方向遍歷同時插入和刪除位於列表中部的元素(同樣地只建議對LinkedList這樣做)
  ArrayList* 由一個數組後推得到的List作為一個常規用途的對象容器使用用於替換原先的Vector允許我們快速訪問元素但在從列表中部插入和刪除元素時速度卻嫌稍慢一般只應該用ListIterator對一個ArrayList進行向前和向後遍歷不要用它刪除和插入元素與LinkedList相比它的效率要低許多
  LinkedList 提供優化的順序訪問性能同時可以高效率地在列表中部進行插入和刪除操作但在進行隨機訪問時速度卻相當慢此時應換用ArrayList也提供了addFirst()addLast()getFirst()getLast()removeFirst()以及removeLast()(未在任何接口或基礎類中定義)以便將其作為一個規格隊列以及一個雙向隊列使用
  
  下面這個例子中的方法每個都覆蓋了一組不同的行為每個列表都能做的事情(basicTest())通過一個反復器遍歷(iterMotion())用一個反復器改變某些東西(iterManipulation())體驗列表處理的效果(testVisual())以及只有LinkedList才能做的事情等
  
  //: Listjava
  // Things you can do with Lists
  package cnewcollections;
  import javautil*;
  
  public class List {
   // Wrap Collectionfill() for convenience:
   public static List fill(List a) {
  return (List)Collectionfill(a);
   }
   // You can use an Iterator just as with a
   // Collection but you can also use random
   // access with get():
   public static void print(List a) {
  for(int i = ; i < a.size(); i++)
   System.out.print(a.get(i) + " ");
  System.out.println();
   }
   static boolean b;
   static Object o;
   static int i;
   static Iterator it;
   static ListIterator lit;
   public static void basicTest(List a) {
  a.add(1, "x"); // Add at location 1
  a.add("x"); // Add at end
  // Add a collection:
  a.addAll(fill(new ArrayList()));
  // Add a collection starting at location 3:
  a.addAll(3, fill(new ArrayList()));
  b = ntains("1"); // Is it in there?
  // Is the entire collection in there?
  b = ntainsAll(fill(new ArrayList()));
  // Lists allow random access, which is cheap
  // for ArrayList, expensive for LinkedList:
  o = a.get(1); // Get object at location 1
  i = a.indexOf("1"); // Tell index of object
  // indexOf, starting search at location 2:
  i = a.indexOf("1", 2);
  b = a.isEmpty(); // Any elements inside?
  it = erator(); // Ordinary Iterator
  lit = a.listIterator(); // ListIterator
  lit = a.listIterator(3); // Start at loc 3
  i = a.lastIndexOf("1"); // Last match
  i = a.lastIndexOf("1", 2); // ...after loc 2
  a.remove(1); // Remove location 1
  a.remove("3"); // Remove this object
  a.set(1, "y"); // Set location 1 to "y"
  // Keep everything that's in the argument
  // (the intersection of the two sets):
  a.retainAll(fill(new ArrayList()));
  // Remove elements in this range:
  a.removeRange(0, 2);
  // Remove everything that's in the argument:
  a.removeAll(fill(new ArrayList()));
  i = a.size(); // How big is it?
  a.clear(); // Remove all elements
   }
   public static void iterMotion(List a) {
  ListIterator it = a.listIterator();
  b = it.hasNext();
  b = it.hasPrevious();
  o = it.next();
  i = it.nextIndex();
  o = it.previous();
  i = it.previousIndex();
   }
   public static void iterManipulation(List a) {
  ListIterator it = a.listIterator();
  it.add("47");
  // Must move to an element after add():
  it.next();
  // Remove the element that was just produced:
  it.remove();
  // Must move to an element after remove():
  it.next();
  // Change the element that was just produced:
  it.set("47");
   }
   public static void testVisual(List a) {
  print(a);
  List b = new ArrayList();
  fill(b);
  System.out.print("b = ");
  print(b);
  a.addAll(b);
  a.addAll(fill(new ArrayList()));
  print(a);
  // Shrink the list by removing all the
  // elements beyond the first 1/2 of the list
  System.out.println(a.size());
  System.out.println(a.size()/2);
  a.removeRange(a.size()/2, a.size()/2 + 2);
  print(a);
  // Insert, remove, and replace elements
  // using a ListIterator:
  ListIterator x = a.listIterator(a.size()/2);
  x.add("one");
  print(a);
  System.out.println(x.next());
  x.remove();
  System.out.println(x.next());
  x.set("47");
  print(a);
  // Traverse the list backwards:
  x = a.listIterator(a.size());
  while(x.hasPrevious())
   System.out.print(x.previous() + " ");
  System.out.println();
  System.out.println("testVisual finished");
   }
   // There are some things that only
   // LinkedLists can do:
   public static void testLinkedList() {
  LinkedList ll = new LinkedList();
  Collection1.fill(ll, 5);
  print(ll);
  // Treat it like a stack, pushing:
  ll.addFirst("one");
  ll.addFirst("two");
  print(ll);
  // Like "peeking" at the top of a stack:
  System.out.println(ll.getFirst());
  // Like popping a stack:
  System.out.println(ll.removeFirst());
  System.out.println(ll.removeFirst());
  // Treat it like a queue, pulling elements
  // off the tail end:
  System.out.println(ll.removeLast());
  // With the above operations, it's a dequeue!
  print(ll);
   }
   public static void main(String args[]) {
  // Make and fill a new list each time:
  basicTest(fill(new LinkedList()));
  basicTest(fill(new ArrayList()));
  iterMotion(fill(new LinkedList()));
  iterMotion(fill(new ArrayList()));
  iterManipulation(fill(new LinkedList()));
  iterManipulation(fill(new ArrayList()));
  testVisual(fill(new LinkedList()));
  testLinkedList();
   }
  } ///:~
  
  在basicTest()和iterMotiion()中,只是簡單地發出調用,以便揭示出正確的語法。TW.WInGWit.CoM而且盡管捕獲了返回值,但是並未使用它。在某些情況下,之所以不捕獲返回值,是由於它們沒有什麼特別的用處。在正式使用它們前,應仔細研究一下自己的聯機文檔,掌握這些方法完整、正確的用法。
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19717.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.