【问题标题】:Store different types in ArrayList在 ArrayList 中存储不同的类型
【发布时间】:2015-07-08 18:46:40
【问题描述】:

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

iD: 整数
x 位置:浮动
y 位置:浮动
名称:字符串

我用:

ArrayList<String> activList ;

但是当我使用时:

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

我得到错误:

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

我不知道如何向 ArrayList 添加不同的类型,有什么办法吗?

感谢您的帮助

【问题讨论】:

  • 您已经创建了一个字符串类型的 ArrayList,因此您应该只将字符串添加到此列表中,在您的代码中您尝试添加一个 int、float、float、string。我建议你复习一下如何将参数传递给方法:docs.oracle.com/javase/tutorial/java/javaOO/arguments.html
  • 你也可以尝试寻找并阅读一些关于面向对象编程的好书。
  • 如您所见,有一些答案。我认为您的正确解决方案取决于您想要这样做的原因。我认为将不同类型的值存储在 ArrayList 之类的东西中不是一个好习惯。

标签: java arraylist processing


【解决方案1】:

您可能需要创建自己的类来表示这 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"));

【讨论】:

    【解决方案2】:

    您可以将 ArrayList 定义为 &lt;Object&gt; 类型并在其中放入任何内容,但这不是一个好习惯。使用您的四个字段、getter 和 setter 以及使用该类型的 ArrayList 创建一个简单的类。这样会更清楚!

    【讨论】:

      【解决方案3】:

      你可以这样做:

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

      对于您的需要,最好创建一个名为 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;
         }
      }
      

      一种创建列表类型的存储

      【讨论】:

        【解决方案4】:

        创建一个封装“元素”行为的类

        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);
        

        最好将字段定义为私有,并通过 getter/setter 访问它们。

        【讨论】:

          【解决方案5】:

          你这里的用法不正确; 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 YourClass {
            private int id;
            private float xPosition;
            private float yPosition;
            private String name;
          
            // constructor, getters, setters, etc.
          }
          

          【讨论】:

            【解决方案6】:

            我不确定这是推荐还是有任何缺点,但是您可以在没有任何泛型的情况下初始化 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]
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-07-20
              • 1970-01-01
              • 2012-01-10
              • 1970-01-01
              • 2020-11-17
              • 1970-01-01
              • 2012-02-29
              • 2014-03-08
              相关资源
              最近更新 更多