创建具有多个对象类型的ArrayList?

Dak*_*iya 42 java arraylist

如何创建ArrayList带整数和字符串输入类型?如果我创建一个:

List<Integer> sections = new ArrayList <Integer>();
Run Code Online (Sandbox Code Playgroud)

这将是一种Integer类型ArrayList.如果我创建一个:

List<String> sections = new ArrayList <String>();
Run Code Online (Sandbox Code Playgroud)

这将是String类型.如何创建一个ArrayList可以采用整数和字符串输入类型的?谢谢.

Gau*_*rma 63

你可以这样做:

List<Object> sections = new ArrayList <Object>();
Run Code Online (Sandbox Code Playgroud)

(推荐)另一种可能的解决方案是使用Integer和其他String两个参数创建自定义模型类.然后使用ArrayList该对象的一个​​.

  • 是的,在我看来"使用两个参数创建自定义模型类"等于具有2个构造函数的包装器类.因此,您可以定义类型包装类的新列表:`List <Wrapper> sections = new ArrayList <Wrapper>(); class Wrapper {private Integer intValue = null; private String strValue = null; public Wrapper(String){...} public Wrapper(Integer){...}}` (3认同)

小智 18

(1)

   ArrayList<Object> list = new ArrayList <>();`     
   list.add("ddd");
   list.add(2);
   list.add(11122.33);    
   System.out.println(list);
Run Code Online (Sandbox Code Playgroud)

(2)

 ArrayList arraylist = new ArrayList();
 arraylist.add(5);        
 arraylist.add("saman");     
 arraylist.add(4.3);        
 System.out.println(arraylist);
Run Code Online (Sandbox Code Playgroud)


San*_*ikh 13

您可以使用Object存储任何类型的值,例如int,float,String,类对象或任何其他java对象,因为它是所有类的根.例如

  1. 宣布上课

    class Person {
    public int personId;
    public String personName;
    
    public int getPersonId() {
        return personId;
    }
    
    public void setPersonId(int personId) {
        this.personId = personId;
    }
    
    public String getPersonName() {
        return personName;
    }
    
    public void setPersonName(String personName) {
        this.personName = personName;
    }}
    
    Run Code Online (Sandbox Code Playgroud)
  2. main函数代码,它创建新的person对象,int,float和string类型,然后添加到List中,并使用for循环进行迭代.识别每个对象,然后打印该值.

        Person p = new Person();
    p.setPersonId(1);
    p.setPersonName("Tom");
    
    List<Object> lstObject = new ArrayList<Object>();
    lstObject.add(1232);
    lstObject.add("String");
    lstObject.add(122.212f);
    lstObject.add(p);
    
    for (Object obj : lstObject) {
        if (obj.getClass() == String.class) {
            System.out.println("I found a string :- " + obj);
        }
        if (obj.getClass() == Integer.class) {
            System.out.println("I found an int :- " + obj);
        }
        if (obj.getClass() == Float.class) {
            System.out.println("I found a float :- " + obj);
        }
        if (obj.getClass() == Person.class) {
            Person person = (Person) obj;
            System.out.println("I found a person object");
            System.out.println("Person Id :- " + person.getPersonId());
            System.out.println("Person Name :- " + person.getPersonName());
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

您可以在java中的此链接Object上找到有关对象类的更多信息

  • 这是一个可怕的代码味道的一个很好的例子.永远不应该使用对象的ArrayList.通常最好重新设计代码,而不是使用getClass/instanceof和downcast来使用ArrayList. (2认同)

Hov*_*els 6

您可以创建一个List<Object>,但您真的不想这样做。抽象为 Object 的混合列表不是很有用,并且是错误的潜在来源。事实上,您的代码需要这样的构造这一事实给您的代码带来了糟糕的代码味道,并表明其设计可能是错误的。考虑重新设计您的程序,这样您就不会被迫与猩猩一起收集橙子。

相反——按照 GV 的建议和我将要推荐的做法,创建一个包含 int 和 String 的自定义类并创建它的 ArrayList。1+他的回答!

  • 是的.. 通常不推荐混合列表。稍后我可能会导致 ClassCastExceptions。 (2认同)

dan*_*ton 5

我也对Java很新,只是想出了这个.您应该创建自己的类来存储字符串和整数,然后创建这些对象的列表.例如(我确信这段代码不完美,但比arrayList更好):

class Stuff {
    private String label;
    private Integer value;

    // Constructor or setter
    public void Stuff(String label, Integer value) {
        if (label == null || value == null) {
            return;
        }
        this.label = label;
        this.value = value;
    }

    // getters

    public String getLabel() {
        return this.label;
    }

    public Integer getValue() {
        return this.value;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中:

private ArrayList<Stuff> items = new ArrayList<Stuff>();
items.add(new Stuff(label, value));

for (Stuff item: items) {
     doSomething(item.getLabel()); // returns String
     doSomething(item.getValue()); // returns Integer
}
Run Code Online (Sandbox Code Playgroud)


小智 5

List<Object> list = new ArrayList<>();
          list.add(1);
          list.add("1");
Run Code Online (Sandbox Code Playgroud)

由于 ArrayList 的返回类型是对象,因此您可以向 ArrayList 添加任何类型的数据,但使用 ArrayList 不是一个好习惯,因为有不必要的装箱和拆箱。