ArrayList的toArray和asList方法

                        ArrayList

原文地址:[https://www.cnblogs.com/meng72ndsc/archive/2010/12/22/1914191.html](https://www.cnblogs.com/meng72ndsc/archive/2010/12/22/1914191.html)
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();
}
}
复制代码

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值