java列表

集合Java API所提供的一系列類,可以用於動態存放多個對象。集合與數組的不同在於,集合是大小可變的序列,而且元素類型可以不受限定,只要是引用類型。集合中不能放基本數據類型,但可以放基本數據類型的包裝類。 集合類全部支持泛型,是一種數據安全的用法。java列表是集合的一種,並且列表中的元素是有序的,且允許重複。java列表又稱為java list。

基本介紹

  • 中文名:java列表
  • 外文名:java list
  • 性質:java的一種集合
  • 特點:以線性存儲,可重複
  • 套用範圍:java語言編程
  • 套用學科:電腦程式設計
用法,排序方法,遍歷方法,

用法

實際上有兩種List:一種是基本的ArrayList,其優點在於隨機訪問元素,另一種是更強大的LinkedList,它並不是為快速隨機訪問設計的,而是具有一套更通用的方法。次序是List最重要的特點:它保證維護元素特定的順序。List為Collection添加了許多方法,使得能夠向List中間插入與移除元素(這隻推薦LinkedList使用)。一個List可以生成ListIterator,使用它可以從兩個方向遍歷List,也可以從List中間插入和移除元素。
ArrayList
ArrayList:是由數組實現的List。允許對元素進行快速隨機訪問,但是向List中間插入與移除元素的速度很慢。ListIterator只應該用來由後向前遍歷 ArrayList,而不是用來插入和移除元素。因為那比LinkedList開銷要大很多。
下面舉出一個例子來說明ArrayList的用法。
public static void main(String[] args) {
    // ArrayList類實現一個可增長的動態數組
    List<String> list = new ArrayList<String>();
    // 插入元素
    list.add("list1");
    list.add("list2");
    // 列印list的大小
    System.out.println(list.size());
    // 按索引移除元素
    list.remove(0);
    // 按對象移除元素
    list.remove("list2");
    // 列印list的大小
    System.out.println(list.size());
    // 清空list
    list.clear();
}
LinkedList
LinkedList :對順序訪問進行了最佳化,向List中間插入與刪除的開銷並不大。隨機訪問則相對較慢。(使用ArrayList代替)還具有下列方 法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 這些方法 (沒有在任何接口或基類中定義過)使得LinkedList可以當作堆疊佇列和雙向佇列使用。
下面舉出一個例子來說明ArrayList的用法。
public static void main(String[] args) {
    // LinkedList類實現了鍊表,可初始化化為空或者已存在的集合
    LinkedList<String> list = new LinkedList<String>();
    // 插入元素
    list.add("list2");
    list.add("list3");
    // 向鍊表頭插入數據
    list.addFirst("list1");
    // 向鍊表尾插入數據
    list.addLast("list4");
    for (String str : list) {
        System.out.println(str);
    }
    // 獲取鍊表頭數據
    System.out.println("鍊表頭數據:" + list.getFirst());
    // 獲取鍊表尾數據
    System.out.println("鍊表尾數據:" + list.getLast());
}

排序方法

數字排序
數字排序是對數字進行排序。下面用java寫出數字排序的表示方式。
public static void main(String[] args) {
 
  // 創建list
   
  List<Integer> list = new ArrayList<Integer>();
    
  // 插入元素
    
  list.add(2);
    
  list.add(0);
    
  list.add(3);
    
  list.add(4);
    
  list.add(1);
    
  Collections.sort(list);
   
  for (int i : list)
  {
        
     System.out.println(i);
    
  }
}
中文排序
中文排序是按照一定規則對中文進行排序。下面用java寫出中文排序的表示方式。
public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("一鳴驚人-Y");
    list.add("人山人海-R");
    list.add("海闊天空-H");
    list.add("空前絕後-K");
    list.add("後來居上-H");
    Comparator<Object> cmp = Collator.getInstance(java.util.Locale.CHINA);
    Collections.sort(list, cmp);
    for (String str : list) {
        System.out.println(str);
    }
}
實體類排序
實體類排序是按照一定規則進行的排序。下面用java寫出實體類排序的表示方式。
package net.xsoftlab.baike;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class TextList {
    public static void main(String[] args) {
        List<User> userlist = new ArrayList<User>();
        userlist.add(new User("Y - 易小星 ", 33));
        userlist.add(new User("W - 王大錘", 33));
        Comparator<User> cmp = new ComparatorUser();
        Collections.sort(userlist, cmp);
        for (User user : userlist) {
            System.out.println(user.getName());
        }
    }
}
class ComparatorUser implements Comparator<User> {
    @Override
    public int compare(User u1, User u2) {
        // 先按年齡排序
        int flag = u1.getAge().compareTo(u2.getAge());
        // 年齡相等比較姓名
        if (flag == 0) {
            return u1.getName().compareTo(u2.getName());
        } else {
            return flag;
        }
    }
}
class User {
    private String name;
    private Integer age;
    public User() {
        super();
    }
    public User(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

遍歷方法

方法一:
超級for循環遍歷:
for(String attribute : list) 
{ 
    System.out.println(attribute); 
}
內部調用第一種,換湯不換藥,因此比Iterator 慢,這種循環方式還有其他限制,不建議使用它
方法二:
對於ArrayList來說速度比較快,用for循環,以size為條件遍歷:
for(int i = 0 ; i < list.size() ; i++)
{ 
   system.out.println(list.get(i)); 
}
內部不鎖定,效率最高,但是當寫多執行緒時要考慮並發操作的問題。
方法三:
集合類的通用遍歷方式,從很早的版本就有,用疊代器疊代:
Iterator it = list.iterator();
 while(it.hasNext()) {
 System.ou.println(it.next);
 }
這種方式在循環執行過程中會進行數據鎖定,性能稍差,同時,如果你想在尋歡過程中去掉某個元素,只能調用it.remove方法,不能使用list.remove方法,否則一定出現並發訪問的錯誤.。

相關詞條

熱門詞條

聯絡我們