抽象数据类型:对象数组

时间:2014-05-21 00:36:11

标签: java arrays data-structures

所以我有这个类,我想要接受一个int的方法,并创建一个这个大小的新数组。如果我 声明

newArray<Object<int,int>> array1 = new newArray<Object<int,int>>(10);

这将创建一个大小为10的数组。


我已经尝试过了

    public class newArray<O>
    {

        private O[] array;

        public newArray(int newArraySize) 
          {
             newArray<O>[] = new newArray<O>[newArraySize];
          }
}

但是我得到了“无法创建newArray的通用数组”错误。

3 个答案:

答案 0 :(得分:1)

不幸的是,您无法创建通用数组。这是由于在Java中实现泛型的方式,这是通过类型擦除。实际上,所有通用类型都被删除了#34;在编译之前,它们的边界类型(通常为Object),因此所有编译器都看到Object而不是TEO。擦除过程会生成自动转换,以确保程序仍能按预期工作。

这意味着你无法做到:

  • new O()(这会被删除到new Object(),编译器不知道该怎么做)
  • new O[](这会被删除到new Object(),这对编译器没有任何帮助)

可以做的是投射:

array = (O[]) new Object[size];

事实上,它是如何在Java的集合框架中完成的。你会得到一个未经检查的&#34;&#34;警告,因为编译器无法证明此转换是安全的,但实际上没有其他选择。

此外,我想要指出的关于你的问题的一些事情,你可能已经或可能不知道:

  • 您不能使用基元作为类型参数
  • Object没有类型参数
  • newArray<O>[] = new newArray<O>[newArraySize];应该是array = new newArray<O>[newArraySize];。您已经声明了要使用的数组。所以使用它!

事实上,您似乎正在实施自己的ArrayList。如果你是,祝你好运!如果你不是,你应该真正使用现有的实现,除非你需要一些你不能得到的特殊行为......

答案 1 :(得分:0)

你快到了。

请查看以下代码,了解有关如何初始化,填充和打印数组的示例。

import java.util.*;

public class Test 
{
    public static void main(String[] args)
    {
        // define the array
        List<Integer> array1 = new ArrayList<Integer>(10);

        // initialize the array with some value. In this case, the Integer "200"
        // note that the array doesn't have a hard limit of 10 as define above. You can change the following value to 20 and it will still work
        for (int i = 0; i < 10; i++)
        {
            array1.add(i, 200);
        }

        // print the array
        System.out.println(array1);
    }
}

答案 2 :(得分:0)

这有帮助吗?

    ArrayList<Integer[][]> r = new ArrayList<Integer[][]>(10);
    // You could replace the above list with a custom list

    Integer[][] ob = new Integer[1][2];
    ob[0][0] = 10;
    ob[0][1] = 20;

    r.add(ob);


    for(Integer[][] o : r)
        for(Integer[] o1 : o)
            for(Integer o2 : o1)
                System.out.println(o2);

输出是:

10
20