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