Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在使用泛型而不是原始类型时实现列表而不是ArrayList_Java_List_Generics_Arraylist_Parameterized - Fatal编程技术网

Java 在使用泛型而不是原始类型时实现列表而不是ArrayList

Java 在使用泛型而不是原始类型时实现列表而不是ArrayList,java,list,generics,arraylist,parameterized,Java,List,Generics,Arraylist,Parameterized,在阅读了许多文章和建议后,我发现我不应该使用ArrayList这样的具体实现,而应该使用List,以允许List接口的不同实现之间的灵活性。到目前为止,我已经看到许多程序员建议使用以下代码行: List list = new ArrayList(); 但是,这会在编译器中警告使用原始类型列表和ArrayList,并且它们实际上应该被参数化 与这些警告同义的是,我发现有几篇帖子告诉我,不应该使用原始类型,我应该利用java提供的非常方便的泛型 就我个人而言,我试图实现一个类,该类充当一个表,需要

在阅读了许多文章和建议后,我发现我不应该使用ArrayList这样的具体实现,而应该使用List,以允许List接口的不同实现之间的灵活性。到目前为止,我已经看到许多程序员建议使用以下代码行:

List list = new ArrayList();
但是,这会在编译器中警告使用原始类型列表和ArrayList,并且它们实际上应该被参数化

与这些警告同义的是,我发现有几篇帖子告诉我,不应该使用原始类型,我应该利用java提供的非常方便的泛型

就我个人而言,我试图实现一个类,该类充当一个表,需要一个内部使用ArrayList的二维列表结构。 我正在尝试实现以下代码行:

List<List> table;
table = new ArrayList();
table.add(new ArrayList());
列表表;
table=新的ArrayList();
table.add(新的ArrayList());
按照我的设想,表结构应该能够容纳多种变量类型,如原始数据类型和字符串变量类型。我尝试过实现泛型,比如使用

List<List<Object>> table = new ArrayList<ArrayList<Object>>();
List table=new ArrayList();
但我收到了许多错误,因此迄今为止失败了

我是编程新手,主修计算机科学,所以如果我对上面例举的代码行有任何可怕的误解,请原谅我

谢谢。

您想这样做:

List<List<Foo>> table = new ArrayList<List<Foo>>();
table.add(new ArrayList<Foo>())
List table=new ArrayList();
table.add(新的ArrayList())
其中
Foo
是存储在表中的类型


您希望类型和值的泛型参数相同。

您应该将类设置为泛型,以避免出现警告/错误。也许我写的这个小班可以帮助你:

import java.util.ArrayList;
import java.util.List;

/**
* Creates a List of Lists of the given type
* @param <T> - The type of the table elements
*/
public class Table <T> {
    private final List<List<T>> data;

    public Table(int rows, int cells) {
        data = new ArrayList<List<T>>(rows);
        for(int i=0; i<rows; i++) {
            data.add(new ArrayList<T>(cells));
        }
    }

    public static void main(String[] args) {
        //create a table of strings
        Table<String> table = new Table<String>(10, 10);
        //do something with table
    }
}
import java.util.ArrayList;
导入java.util.List;
/**
*创建给定类型的列表列表
*@param-表元素的类型
*/
公共类表{
私人最终名单数据;
公共表(int行、int单元格){
数据=新的ArrayList(行);
对于(int i=0;i
import java.util.ArrayList;
导入java.util.List;
公共类样本{
私人最终int x;
私人终审法院;
私人最终名单;
公共样本(最终整数x,最终整数y){
这个.x=x;
这个。y=y;
列表=新的ArrayList();
对于(int k=0;k=x){
返回null;
}
如果(索引>=y){
返回null;
}
返回列表.get(indexX).get(indexY);
}

现在,您可以调用
Sample s=new Sample();
并完成。希望它能回答您的查询。

您仍然在这里使用原始类型
List
。读取最后一段代码的地址。这应该是
List table=new arrarylist();
,您可能正在查找
List>()
但这仍然只存储
对象
,不一定是
字符串
或其他任何东西。我现在真的明白了。谢谢。它看起来很简单,但我还是搞不懂。我感到欣慰的是,我不会得到更多的警告,仍然使用泛型。非常感谢你。非常感谢你的努力。我理解它现在。
Table<Object> table = new Table<Object>(10, 10);
import java.util.ArrayList;
import java.util.List;

public class Sample<T> {

    private final int x;
    private final int y;
    private final List<List<T>> list;

    public Sample(final int x, final int y) {
        this.x = x;
        this.y = y;
        list = new ArrayList<>();
        for(int k=0; k<y; k++) {
           list.add(k, new ArrayList<T>());
        }
    }


    public T get(final int indexX, final int indexY) {
        if(indexX >= x) {
            return null;
        }
        if(indexY >= y) {
            return null;
        }
        return list.get(indexX).get(indexY);
    }