老紫竹JAVA提高教程(7)-认识List列表之ArrayList
2008-11-28 07:12
477 查看
原文地址:http://www.java2000.net/p11888
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]
相关文章推荐
- 老紫竹JAVA提高教程(10)-认识List列表之Stack
- 老紫竹JAVA提高教程(8)-认识List列表之Vector
- 老紫竹JAVA提高教程(6)-认识List列表
- 老紫竹JAVA提高教程(9)-认识List列表之LinkedList
- 老紫竹JAVA提高教程(4)-认识Set集合之TreeSet
- 老紫竹JAVA提高教程(13)-认识Map之Hashtable
- 老紫竹JAVA提高教程(14)-认识Map之LinkedHashMap
- 老紫竹JAVA提高教程(1)-认识Set集合
- 老紫竹JAVA提高教程(3)-认识Set集合之LinkedHashSet
- 老紫竹JAVA提高教程(12)-认识Map之HashMap
- 老紫竹JAVA提高教程(11)-认识Map
- Java自学之路-Java基础教程-40:Java的列表接口List和列表类ArrayList
- 老紫竹JAVA提高教程(5)-认识Set集合之EnumSet
- 老紫竹JAVA提高教程(2)-认识Set集合之HashSet
- 分析Java中ArrayList与LinkedList列表结构的源码
- 老紫竹提高教程 - Java代理服务器和NTLM认证的使用
- JAVA之旅(十九)——ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习
- 分析Java中ArrayList与LinkedList列表结构的源码
- JAVA之旅(十九)——ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习
- JAVA提高教程(1)-认识Set集合