ArrayList toArray、asList等方法。

                        ArrayList

ArrayList:我们可以将其看作是能够自动增长容量的数组。
利用ArrayList的toArray()返回一个数组。
Arrays.asList()返回一个列表。
迭代器(Iterator)给我们提供了一种通用的方式来访问集合中的元素。
ArrayList的用法

 

代码
import java.util.*;

public class ArrayListTest {
public static void main(String[] args) {
List al
= new ArrayList();
al.add(
"java");
al.add(
" world");
System.
out.println(al);// 打印ArrayList的一个对象
}
}

输出结果:

 

[java, world]

结果分析:

  因为 ArrayList 是从Object继承下来的。它也重写并实现了toString()方法,打印对象的时候,会自动调用对象的toString方法 ,然后会调用这个列表中的元素的toString方法,然后将元素打印出来,自定义的类应该重写toString方法,否则将会打印[xxx@11445s, yyy@ddd],也就是说里面是地址。能成功打印java和world是因为String类继承自Object,重写了toString方法。

注意:
List中经常使用的方法:
1.    add ()是向列表中添加元素。
2.    size()是获得列表当中元素的数目。
3.    get()是获得列表当中的元素。通过索引的方式。
4.    因为String类继承自Object,它重写了toString()方法,所以在调用对象的时候就自动地启用了toString()方法。那么如果是我们自己定义的类。如果要直接打印对象,希望得到这个对象所在类的详细信息,那么我们就应该去重写toString()方法。

 

import java.util.*;

public class ArrayListTest {
public static void main(String[] args) {
ArrayList al
= new ArrayList();
al.add(
"java");
al.add(
" world");
for (int i = 0; i < al.size(); i++) {// 打印输出列表中的元素
System.out.println(al.get(i));
}
//System.out.println(al);// 打印ArrayList的一个对象
}
}

 

 

代码
import java.util.ArrayList;

public class ArrayListTest {
public static void main(String[] args) {
ArrayList al
= new ArrayList();
al.add(
new Point(1,2));
al.add(
new Point(5,2));

System.out.println(al);
// 打印ArrayList的一个对象
}
}

class Point {
private int x,y;
public Point(int x,int y) {
this.x = x;
this.y = y;
}
}

打印将会得到一连串地址信息。

 

需要重写toString(),并合适的实现。

 

class Point {
int x,y;
public Point(int x,int y) {
this.x = x;
this.y = y;
}

public String toString() {
return "x= "+x+" y= "+y;
}
}

 

 

再次编译运行:

toArray()方法。返回一个数组,包含了这个列表当中的所有元素。toArray()返回的是一个对象类型的数组。可以通过列表当中的toArray获取一个数组对象,

 

代码
import java.util.*;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList al
= new ArrayList();
al.add(
new Point(1, 2));
al.add(
new Point(5, 2));
Object[] obj
= al.toArray();
for (int i = 0; i < obj.length; i++) {
System.out.println(obj[i]);
}
}
}

class Point {
int x, y;

public Point(int x, int y) {
this.x = x;
this.y = y;
}

public String toString() {
return "x= " + x + " y= " + y;
}
}

asList
Array.asList()将一个对象数组转换成一个列表返回,返回一个固定尺寸的列表,也就是不能再增加或减少元素。但是可以修改现有列表当中的值。

 

 

代码
import java.util.*;

public class ArrayListTest {
public static void main(String[] args) {
ArrayList al
= new ArrayList();
al.add(
new Point(1, 2));
al.add(
new Point(5, 2));

Object[] obj
= al.toArray();// 将列表转换成为对象数组

List list
= Arrays.asList(obj);// 将对象数组转换成为列表
System.out.println(list);
}
}

如果向这个列表中添加对象就会出现异常。

 

 

代码
import java.util.*;

public class ArrayListTest {
public static void main(String[] args) {
ArrayList al
= new ArrayList();
al.add(
new Point(1, 2));
al.add(
new Point(5, 2));

Object[] obj
= al.toArray();

List list
= Arrays.asList(obj);
System.out.println(list);
list.add(
new Point(5,6));// 向列表当中增加元素。
}
}

 

使用set方法修改元素是没有问题的。也就是说返回的是一个固定长度的列表,只要你不修改它的长度,执行别的任何操作都是可以的。


Arrays类当中的asList(Object[] obj) 方法和集合类当中的toArray()方法,作为数组和集合类的一种桥。也就是如果从集合当中获取一个数组,可以利用toArray()方法,如果想要从数组中获取列表,可以利用asList(Object[] obj)方法。

 

ArrayList综合使用:

代码
package com.collection;

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

public class ArrayListTest {
public static void main(String[] args) {
ArrayList
<Point> list = new ArrayList<Point>();
Point pt1
= new Point(2, 1);
Point pt2
= new Point(3, 2);
Point pt3
= new Point(4, 3);

list.add(pt1);
list.add(pt2);
list.add(pt3);

// 遍历集合中的元素Object java.util.List.get(int index)
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println(list);

// Object[] toArray()返回包含此 collection 中所有元素的数组。
Object[] obj = list.toArray();// 相当于Object[] obj = {pt1,pt2,pt3};
for (int i = 0; i < obj.length; i++) {
System.out.println(obj[i]);
}

// 返回集合元素的大小int java.util.List.size()
int size = list.size();
System.out.println(size);
// 3

// boolean java.util.List.contains(Object o)判断是否包含元素o
// Returns true if this list contains the specified element
if (list.contains(pt2)) {
// boolean java.util.List.remove(Object o)从该列表中删除指定的元素的第一个匹配项
list.remove(pt2);
}

// Point java.util.ArrayList.set(int index, Point element)
// 用指定的元素element替代此列表中指定索引index位置上的元素。
// 也就是说被替代的元素要存在,如果不存在会抛出IndexOutOfBoundsException 异常。
list.set(0, new Point(4, 4)); list.set(0, new Point(4, 4));

// 判断集合中是否为空
if (!list.isEmpty()) {
// 如果不为空,就打印该列表的元素
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}

// <Object> List<Object> java.util.Arrays.asList(Object...
// a)返回一个固定尺寸的列表,也就是不能再增加或减少元素。但是可以修改现有列表当中的值。
// 将一个数组转化成为一个列表的对象,它的返回对象是List,不能使用List的子类接收。
List<Object> l = Arrays.asList(obj);
l.add(
new Point(5, 5));// 添加元素,抛出java.lang.UnsupportedOperationException异常
l.set(1, new Point(5, 5));// 修改现有列表当中的值。不会抛出什么异常。
l.remove(0);// 移除元素,抛出java.lang.UnsupportedOperationException异常,说了不能改列表的尺寸就是不能改。

// public void trimToSize()将此 ArrayList 实例的容量调整为列表的当前大小。
// 应用程序可以使用此操作来最小化 ArrayList 实例的存储量。
list.trimToSize();// List的对象是不能调用该方法的。

// 从列表中移除该列表所有包含的元素
// removeAll(Collection<?> c)属于Collection和 List
list.removeAll(list);
size
= list.size();
System.out.println(size);
// 0

// 移除此列表中的所有元素。ArrayList重写了Collection的clear();
list.clear();
}
}

 

posted @ 2010-12-22 21:32  meng72ndsc  阅读(3418)  评论(0编辑  收藏  举报