关于java中动态数组的toArray()方法的运用????

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java中动态数组的toArray()方法的运用????相关的知识,希望对你有一定的参考价值。

public static void FCFS(ArrayList<Process[]> list)
Process []p=(Process[])list.toArray(new Process[0]);
// Object a[]=list.toArray();
// Process []p=(Process[])a;
Arrays.sort(p);
System.out.println("FCFS的调度结果是:");
for (int i = 0; i < p.length; i++)
System.out.print(p[i].name+" ");


public static void main(String[] args)
ArrayList<Process[]> list=new ArrayList<Process[]>();
Process p[] = new Process[5];
p[0] = new Process("A",0,4,2);
p[1] = new Process("B",1,3,6);
p[2] = new Process("C",2,5,9);
p[3] = new Process("D",3,2,4);
p[4] = new Process("E",4,4,5);
list.add(p);
FCFS(list);
我就是想把数组变为动态的,然后传到FCFS()方法中调用,以便以后可能会对数组进行扩充。但是我上面的实现有问题,不能编译成功,有没有高手可以指教一下,用别的方法也可。谢谢!!

不能处理数组...
ArrayList<Process> list=new ArrayList<Process>();
list.add(p[0]);
list.add(p[1]);
list.add(p[2]);
。。。

这样才行,不支持数组,如:ArrayList<Process[]> list=new ArrayList<Process[]>();
实现机制决定的
参考技术A 首先你的想法就是错误的,数组长度一旦定义就不会再增加了,你如果想实现那功能建议使用Map或者list

关于java不支持泛型数组的思考

起因:
今天在看LinkedList源码时,发现

 public <T> T[] toArray(T[] a)方法创建一个泛型数组使用了很奇怪的方式
a = (T[])java.lang.reflect.Array.newInstance(
                                a.getClass().getComponentType(), size)
 
    @SuppressWarnings("unchecked")
    public <T> T[] toArray(T[] a) {
        if (a.length < size)
            a = (T[])java.lang.reflect.Array.newInstance(
                                a.getClass().getComponentType(), size);
        int i = 0;
        Object[] result = a;
        for (Node<E> x = first; x != null; x = x.next)
            result[i++] = x.item;

        if (a.length > size)
            a[size] = null;

        return a;
    }

 

疑问:为什么不直接使用T[] a = new T[size]来创建泛型数组?

在eclipse测试时,报错

 

 

百度上搜索后

Java不能创建泛型数组的解决方案

 

Java不能创建泛型数组 

Java中创建泛型数组

 

总结

java数组时是协变,即Base[] base= new Sub[];Base是Sub的父类

先假设Java可以创建泛型数组,由于java泛型的类型擦除和数组的协变。下面的代码将会编译通过。但是运行时会报错

List<String>[] stringLists=new List<String>[1];
List<Integer> intList = Arrays.asList(40);
Object[] objects = stringLists;
Objects[0]=intList;
String s=stringLists[0].get(0);

 java集合不支持协变,因此出现了泛型

 

 

以上是关于关于java中动态数组的toArray()方法的运用????的主要内容,如果未能解决你的问题,请参考以下文章

关于List.ToArray()方法的效率测试

如何在 Java 中将 list.toArray() 方法用于二维数组

Java学习笔记集合转数组---toArray()

java中Collection方法里面的Object[] toArray() 和 <T> T[] toArray(T[] a)有啥区别吗?

ArrayList中的toArray方法

Java Collections的两个toArray()函数有什么区别?