集合与数组的不同点
相同点
都是存储数据的容器,存储Object类型时,其实存储的都是对象的引用(地址)
不同点:
(1)数组可以存储基本数据类型,集合不可以;
(2)数组的长度固定,对象数量未知时不适合使用; 集合的长度可变,适用性比较广。
集合与数组间的转换
(1)数组转集合
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
* 数组转成集合
*
* Arrays类中提供了一个静态方法asList, 此方法可以将数组对象转换成集合对象
* static <T> List<T> asList(T... a)
* 返回由指定数组支持的固定大小的列表。
* 返回的List的集合元素类型由传入的数组的元素类型决定
*
* 注意:返回的集合我们 不能 对其进行增删元素,否则抛出异常。
* 并且对集合的元素进行修改会影响数组对应的元素
* 如果想对集合进行增删改,可以将此集合里的元素添加到一个新集合对象中。
*/
public class Test {
public static void main(String[] args) {
//声明一个数组s
String s[] = {"aa","bb","cc"};
//查看数组中元素
for(int i=0;i<s.length;i++){
String s1 = s[i];
System.out.println("数组s:"+s1);
}
//System.out.println(Arrays.toString(s));
//将数组转成集合
List<String> l = Arrays.asList(s);
System.out.println("数组转成的集合:"+l);
//输出:数组转成的集合:[aa, bb, cc]
//集合中添加元素
//l.add("dd");
/*
* 报异常:java.lang.UnsupportedOperationException
* 说明:不能对转换后的集合进行添加操作
*/
//集合中删除元素
//l.remove(0);
/*
* 报异常:java.lang.UnsupportedOperationException
* 说明:不能对转换后的集合进行删除操作
*/
//修改元素
l.set(0, "dd");
System.out.println("修改后的集合:"+l);
//输出:修改后的集合:[dd, bb, cc]
System.out.println("修改后的数组:"+Arrays.toString(s));
//输出:修改后的数组:[dd, bb, cc]
/*
* 说明:对转换后的集合进行修改操作,会相应的对原数组进行改变
*/
/*
* 对转换后的集合进行增删操作:
* 将集合元素全部添加到一个新集合里,再对新集合进行相应的增删操作
*/
List<String> l1 = new ArrayList<String>();
l1.addAll(l);
System.out.println("新集合l1:"+l1);
//输出:新集合l1:[dd, bb, cc]
//进行增加操作
l1.add("add");
System.out.println("增加操作后的集合:"+l1);
//输出:增加操作后的集合:[dd, bb, cc, add]
//进行删除操作
l1.remove("add");
System.out.println("删除操作后的集合:"+l1);
//输出:删除操作后的集合:[dd, bb, cc]
}
}
(2)集合转数组
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
/*
* 集合转成数组
*
* Object[] toArray()
* 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。
* 作用:将集合转成Object类型的数组,不常用
* <T> T[] toArray(T[] a)
* 以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素);
* 返回的数组的运行时类型是指定数组的运行时类型。
* 作用:将集合转换成泛型规定的类型的数组,常用
*/
public class Test1 {
public static void main(String[] args) {
//声明一个集合l
Collection<String> l = new ArrayList<String>();
//向集合中添加元素
l.add("aa");
l.add("bb");
l.add("cc");
//查看集合
System.out.println(l);
//输出:[aa, bb, cc]
/*
* 将集合转成数组
* Object[] toArray()
*/
Object[] s = l.toArray();
//查看数组
System.out.println(Arrays.toString(s));
//输出:[aa, bb, cc]
/*
* 将集合转成数组
* <T> T[] toArray(T[] a)
*/
String s1[] = l.toArray(new String[l.size()]);
//查看数组
System.out.println(Arrays.toString(s1));
//输出:[aa, bb, cc]
}
}