方法:
数组转换成集合是用 Arrays 工具类中Arrays.asList 方法
集合转换成数组是用 Arrays 工具类中Arrays.toArray 方法
这里要强调Arrays 工具类的方法用集合或者数组中最父类的接口去实现
比如 Arrays.asList(cityList) 就不能用List接口下的ArrayList类去接收 ,只能用List接口接收
因为asList 方法返回的是和我们常用的ArrayList 同名的一个内部类,更说明不能用常用的ArrayList去接收
可以看一下源代码
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
/**
* @serial include
*/
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}
@Override
public int size() {
return a.length;
}
针对当前问题解决代码如下
public static void main(String[] args) {
String[] cityList = {"巴黎","上海","纽约","华盛顿","东京","首尔","巴西","尼泊尔"};
//将数组转换成集合
//这里 返回的是 arrays工具类中的内部类 ArrayList 并非正常的ArrayList
//用ArrayList 是无法接受的只能用List接口去接收
List<String> list = Arrays.asList(cityList);
System.out.println(list);
System.out.println("集合内元素的数量:"+list.size());
System.out.println("当前集合的类型是:"+list.getClass());//class java.util.Arrays$ArrayList $表示内部类
//将集合转换成数组
System.out.println("------------------------------------------");
//截取集合中的后五个转换成数组
List<String> newlist = list.subList(list.size()-5, list.size());
Object []neArrayStrings = newlist.toArray();
System.out.println(Arrays.toString(neArrayStrings));
System.out.println(neArrayStrings.getClass());//class [Ljava.lang.Object;
}
运行结果如下
[巴黎, 上海, 纽约, 华盛顿, 东京, 首尔, 巴西, 尼泊尔]
集合内元素的数量:8
当前集合的类型是:class java.util.Arrays$ArrayList
------------------------------------------
[华盛顿, 东京, 首尔, 巴西, 尼泊尔]
class [Ljava.lang.Object;