Java集合综合练习4——数组和集合的相互转换

方法:
数组转换成集合是用 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;

你可能感兴趣的:(java)