在 ArrayList 中存储不同的类型

Store different types in ArrayList

我想将元素存储在一个列表中,每个元素有 4 个参数 我正在尝试创建一个数组列表,为每个元素存储 4 个不同类型的参数:

iD: int
x position : float
y position : float
name : string

我使用:

ArrayList<String> activList ;

但是当我使用时:

 activList.add(2, 4.5, 8.9,"Name");

我收到错误:

" ArrayList 类型中的方法 add(int,Object) 不适用于参数 (in, float, float)"

我不知道如何将不同的类型添加到 ArrayList,有办法吗?

感谢您的帮助

您的用法不正确; add 不需要添加多个项目。您正在寻找的是:

activList.add(2);
activList.add(4.5);
activList.add(8.9);
activList.add("Name");

当然,这仍然行不通,因为您的 ArrayList 拥有 String 个对象。如果你想要的只是保存各种对象的字符串表示,你可以使用 Java 中 toString 的许多实现来实现:

activList.add(Integer.toString(2));
activList.add(Double.toString(4.5));
activList.add(Double.toString(8.9));
activList.add("Name");

但如果您的目标是将名称与值相关联,您实际上应该只使用 class:

class YourClass {
  private int id;
  private float xPosition;
  private float yPosition;
  private String name;

  // constructor, getters, setters, etc.
}

您可以将 ArrayList 定义为 <Object> 类型并在其中放入任何内容,但这不是好的做法。使用您的四个字段、getter 和 setter 创建一个简单的 class,并使用该类型的 ArrayList。这样就清楚多了!

你可以这样做:

List<Object> test = new ArrayList<>();
test.add(10);
test.add("Test");
test.add(1.0);
test.add('c')

根据您的需要,最好创建一个 class,例如 Storage

class Storage{
   int id;
   String name;
   float x;
   float y;
   public Storage(int id, String name, float x, float y){
     this.id = id;
     this.name = name;
     this.x = x;
     this.y = y;
   }
}

一个创建列表类型的存储

您可能需要创建自己的 class 来表示这 4 个参数。然后您可以将该对象的实例插入到 ArrayList 中:

public class MyParameters {
    private int id;
    private float x;
    private float y;
    private String name;

    public MyParameters(int id, float x, float y, String name) {
        // ...
    }

    // + getters, setters
}

// ...

List<MyParameters> myParameters = new ArrayList<>();
myParameters.add(new MyParameters(2, 4.5, 8.9, "Name"));

创建一个封装 "element"

行为的 class
public class YourClass
{

    public YourClass() { }

    int id;
    float x;
    float y;
    String name;

}

然后你可以像这样定义一个列表:

ArrayList<YourClass> activList = new ArrayList<YourClass>();

YourClass e = new YourClass();
e.id = 2;
e.x = 4.5;
e.y = 8.9;
e.name = "Name";

activList.add(e);

最好将字段定义为私有,然后通过getters/setters访问它们。

我不确定这是否值得推荐或有任何缺点,但您可以在不使用任何泛型的情况下初始化 ArrayList。 然后你可以将任何类型的对象添加到 ArrayList

ArrayList al = new ArrayList();
al.add(5);
al.add("Naruto Uzumaki");
al.add(25.24);
System.out.println(al)

这会给你

的输出
[5, Naruto Uzumaki, 25.24]