程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA提高教程(7)-認識List列表之ArrayList

JAVA提高教程(7)-認識List列表之ArrayList

編輯:關於JAVA

ArrayList是List裡面使用率最高的。

package collection.lession7;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

/**
* 老紫竹JAVA提高教程(7)-認識List列表之ArrayList<br>
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
public class Lession7 {

  public static void main(String[] args) {
   testNormal();
   testSpecial();
   // 一個最常見的錯誤
   testForProblem();
  }

  public static void testNormal() {
   // -------------------------------------------------------
   // 聲明一個列表
   // 允許放入任何數據
   // -------------------------------------------------------
   ArrayList list = new ArrayList();
   // 放入整數
   // 當然你用 new Integer(1)也可以
   list.add(1);
   // 放入字符串
   list.add("abc");
   // 放入浮點數
   list.add(new Float(1.11));
   // add會將數據保存到列表的尾部
   showList(list); // 1, abc, 1.11]

   // 下面我們在列表的頭部增加數據
   list.add(0, 2);
   list.add(0, "bcd");
   list.add(0, new Double(2.34));
   // 列表可以指定插入的位置
   // 0 是頭部第一個位置,所以數據都逐個放到最前面了
   showList(list); // [2.34, bcd, 2, 1, abc, 1.11]

   // 下面我們插入到我們希望的任何位置
   // 當然不能越界,(0 到 list.size()-1)范圍內才可以
   list.add(1, 3);
   list.add(4, "xyz");
   // 數據被放到了正確的位置
   showList(list); // [2.34, 3, bcd, 2, xyz, 1, abc, 1.11]

   // -------------------------------------------------------
   // 我們有了數據,我們來測試讀取數據
   // -------------------------------------------------------
   // 我們可以通過指定索引的位置,來拿到我們希望的數據
   System.out.println(list.get(0)); // 2.34
   System.out.println(list.get(4)); // xyz

   // -------------------------------------------------------
   // 測試是否存在某個數據
   // -------------------------------------------------------
   System.out.println(list.contains("xyz")); // true

   // 測試是否包含一組數據
   Collection c = new ArrayList();
   c.add(1);
   c.add(2);
   System.out.println(list.containsAll(c)); // true
   c.add(3);
   c.add(4);
   // containsAll_1234=false
   System.out.println(list.containsAll(c)); // false

   // -------------------------------------------------------
   // 查找某個數據所在的索引位置
   // 如果不存在,返回-1
   // -------------------------------------------------------
   System.out.println(list.indexOf(3)); // 1
   System.out.println(list.indexOf("xyz")); // 4
   System.out.println(list.indexOf("abcd")); // -1

   // -------------------------------------------------------
   // 測試刪除數據
   // 請注意,
   // 如果你使用整數(int)數字,則默認調用的是remove(int index);
   // 如果你用 long,則會調用 remove(Object obj);
   // 所以如果你要刪除整數,請使用 remove(new Integer(int));
   // -------------------------------------------------------
   // 刪除索引為1的數據
   list.remove(1);
   // 索引為1的數據被干掉了
   showList(list); // [2.34, bcd, 2, xyz, 1, abc, 1.11]

   // 刪除數字1 和字符串 abc
   list.remove(new Integer(1));
   list.remove("xyz");
   showList(list); // [2.34, bcd, 2, abc, 1.11]

   // -------------------------------------------------------
   // 迭代器的使用
   // -------------------------------------------------------
   Iterator it = list.iterator();
   while (it.hasNext()) {
    System.out.print(it.next() + " "); // 2.34 bcd 2 abc 1.11
   }
   System.out.println();

   // -------------------------------------------------------
   // 轉化為數組
   // -------------------------------------------------------
   Object[] objs = list.toArray();
   for (Object obj : objs) {
    System.out.print(obj + " "); // 2.34 bcd 2 abc 1.11
   }
   System.out.println();
  }

  public static void testSpecial() {
   // -------------------------------------------------------
   // 測試重復和null
   // -------------------------------------------------------
   //
   List<Integer> list = new ArrayList<Integer>();
   list.add(123);
   list.add(456);
   list.add(123);
   list.add(456);
   // 數據允許重復
   showList(list); // [123, 456, 123, 456]

   list.add(null);
   list.add(789);
   list.add(null);
   list.add(999);
   // 允許放入多個null
   showList(list); // [123, 456, 123, 456, null, 789, null, 999]

   // -------------------------------------------------------
   // 測試一下查找最後一次出現的位置
   // -------------------------------------------------------
   System.out.println(list.indexOf(123)); // 0
   System.out.println(list.lastIndexOf(123)); // 2

   // -------------------------------------------------------
   // 轉化為數組
   // 記得要轉化為Inerger.
   // -------------------------------------------------------
   Integer[] nums = (Integer[]) list.toArray(new Integer[0]);
   // 注意數據裡面有null,所以循環變量不要用int 要用Integer
   for (Integer num : nums) {
    System.out.print(num + " "); // 123 456 123 456 null 789 null 999
   }
   System.out.println();

  }

  public static void testForProblem() {
   // 一些朋友在向循環裡向列表增加對象的時候
   // 經常忘記初始化,造成最終加入的都是同一個對象
   List<MyObject> list = new ArrayList<MyObject>();
   MyObject obj = new MyObject();
   for (int i = 1; i <= 5; i++) {
    obj.setName("Name" + i);
    list.add(obj);
   }
   // 裡面的數據都是最後一個
   showList(list); // [Name5, Name5, Name5, Name5, Name5]

   // 正確的做法
   List<MyObject> list2 = new ArrayList<MyObject>();
   MyObject obj2 = null;
   for (int i = 1; i <= 5; i++) {
    obj2 = new MyObject();
    obj2.setName("Name" + i);
    list2.add(obj2);
   }
   // 裡面的數據都是最後一個
   showList(list2); // [Name1, Name2, Name3, Name4, Name5]
  }

  /**
  * 顯示List裡面的數據。
  *
  * @param list
  */
  private static void showList(List list) {
   System.out.println(Arrays.toString(list.toArray()));
  }
}

class MyObject {
  private String name;

  public String getName() {
   return name;
  }

  public void setName(String name) {
   this.name = name;
  }

  /**
  * 重寫toString方法,輸出name
  */
  public String toString() {
   return name;
  }
}

輸出結果

[1, abc, 1.11]
[2.34, bcd, 2, 1, abc, 1.11]
[2.34, 3, bcd, 2, xyz, 1, abc, 1.11]
2.34
xyz
true
true
false
1
4
-1
[2.34, bcd, 2, xyz, 1, abc, 1.11]
[2.34, bcd, 2, abc, 1.11]
2.34 bcd 2 abc 1.11
2.34 bcd 2 abc 1.11
[123, 456, 123, 456]
[123, 456, 123, 456, null, 789, null, 999]
0
2
123 456 123 456 null 789 null 999
[Name5, Name5, Name5, Name5, Name5]
[Name1, Name2, Name3, Name4, Name5]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved