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

时间:2013-10-26 03:50:55

标签: java arraylist

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

List<Integer> sections = new ArrayList <Integer>();

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

List<String> sections = new ArrayList <String>();

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

13 个答案:

答案 0 :(得分:59)

你可以这样做:

List<Object> sections = new ArrayList <Object>();

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

答案 1 :(得分: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;
    }}
    
  2. 主要功能代码,它创建新的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());
        }
    }
    
  3. 您可以在此链接Object in java

    上找到有关对象类的更多信息

答案 2 :(得分:13)

(1)

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

(2)

 ArrayList arraylist = new ArrayList();
 arraylist.add(5);        
 arraylist.add("saman");     
 arraylist.add(4.3);        
 System.out.println(arraylist);

答案 3 :(得分: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;
    }
}

然后在你的代码中:

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
}

答案 4 :(得分:3)

您不知道类型是Integer还是String,那么您不需要Generic。走老路。

List list= new ArrayList ();

list.add(1);
list.add("myname");

for(Object o = list){

} 

答案 5 :(得分:2)

用户定义的类阵列表示例

import java.util.*;  

public class UserDefinedClassInArrayList {

    public static void main(String[] args) {

        //Creating user defined class objects  
        Student s1=new Student(1,"AAA",13);  
        Student s2=new Student(2,"BBB",14);  
        Student s3=new Student(3,"CCC",15); 

        ArrayList<Student> al=new ArrayList<Student>();
        al.add(s1);
        al.add(s2);  
        al.add(s3);  

        Iterator itr=al.iterator();  

        //traverse elements of ArrayList object  
        while(itr.hasNext()){  
            Student st=(Student)itr.next();  
            System.out.println(st.rollno+" "+st.name+" "+st.age);  
        }  
    }
}

class Student{  
    int rollno;  
    String name;  
    int age;  
    Student(int rollno,String name,int age){  
        this.rollno=rollno;  
        this.name=name;  
        this.age=age;  
    }  
} 

节目输出:

1 AAA 13

2 BBB 14

3 CCC 15

答案 6 :(得分:2)

这取决于用例。请你详细描述一下吗?

  • 如果您希望能够同时添加两者,那么@Sanket Parikh可以很好地描述。将Integer和String放入一个新类中并使用它。
  • 如果要添加字符串String或int,但一次只添加其中一个,那么确定它是List<Object>

    看起来不错,但只是第一眼!这不是一个好的模式。每次从列表中获取对象时,都必须检查对象的类型。此类型的列表也可以包含任何其他类型..所以不,不是一个很好的解决方案。虽然可能是初学者可以使用它。如果你选择这个,我建议你检查Java中的“instanceof”是什么。

  • 我强烈建议您重新考虑您的需求,并考虑一下您的真正需要将整数封装到List<Integer>并将字符串封装到单独的List<String>

我可以告诉你一个关于你现在想做什么的比喻吗?我想说你想制作一个可以包含咖啡豆和咖啡店的清单。这些类型的对象完全不同!为什么这些放在同一个架子上? :)

或者你有可能是单词或数字的数据? YEPP!这是有道理的,它们都是数据!然后尝试使用一个对象作为包含数据的对象,如果需要,可以转换为整数值。

public class MyDataObj {
String info;
boolean isNumeric;

public MyDataObj(String info){
    setInfo(info);
}

public MyDataObj(Integer info){
    setInfo(info);
}

public String getInfo() {
    return info;
}

public void setInfo(String info) {
    this.info = info;
    this.isNumeric = false;
}

public void setInfo(Integer info) {
    this.info = Integer.toString(info);
    this.isNumeric = true;
}

public boolean isNumeric() {
    return isNumeric;
}
}

这样您就可以使用List<MyDataObj>来满足您的需求。再次,这取决于您的需求! :)

某些版本:如何使用吸入剂?这比List<Object>解决方案更好,因为你不能在列表中有其他类型,然后是字符串或整数: 接口:

public interface IMyDataObj {
public String getInfo();
}

For String:

public class MyStringDataObj implements IMyDataObj {

final String info;

public MyStringDataObj(String info){
    this.info = info;
}

@Override
public String getInfo() {
    return info;
}
}

For Integer:

public class MyIntegerDataObj implements IMyDataObj {

final Integer info;

public MyIntegerDataObj(Integer info) {
    this.info = info;
}

@Override
public String getInfo() {
    return Integer.toString(info);
}
}

最后列表将是:List<IMyDataObj>

答案 7 :(得分:1)

你可以创建一个List<Object>,但你真的不想这样做。抽象到Object的混合列表不是很有用,并且是潜在的错误来源。事实上,您的代码需要这样的构造,这会给您的代码带来不良的代码异味,并暗示其设计可能已关闭。考虑重新设计你的程序,这样你就不会被迫用猩猩收集橘子。

相反 - 做G V推荐的并且我打算推荐,创建一个包含int和String的自定义类并创建它的ArrayList。他的回答是1+!

答案 8 :(得分:1)

您始终可以创建ArrayList Object个。但它对你来说不是很有用。假设您已经像这样创建了Arraylist

List<Object> myList = new ArrayList<Object>();

并将对象添加到此列表中,如下所示:

myList.add(new Integer("5"));

myList.add("object");

myList.add(new Object());

添加和检索对象时不会遇到任何问题,但它不会非常有用。 您必须记住每种类型的对象在哪个位置才能使用它。在这种情况下,在检索之后,您所能做的只是在它们上调用Object的方法。

答案 9 :(得分:1)

你可以添加不同的对象&#34;类型&#34;到ArrayList的一个实例。无需创建ArrayList。看看下面的例子, 您将获得以下输出:

 开始......
 数组的内容:[String,1]
 清单大小:2
 这不是整数字符串
 这是一个整数1

package com.viswa.examples.programs;

import java.util.ArrayList;
import java.util.Arrays;

public class VarArrayListDemo {

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static void main(String[] args) {
        System.out.println(" Beginning....");

        ArrayList varTypeArray = new ArrayList();
        varTypeArray.add("String");
        varTypeArray.add(1); //Stored as Integer

        System.out.println(" Contents of array: " + varTypeArray + "\n Size of the list: " + varTypeArray.size());

        Arrays.stream(varTypeArray.toArray()).forEach(VarArrayListDemo::checkType);
    }

    private static <T> void checkType(T t) {

        if (Integer.class.isInstance(t)) {
            System.out.println(" This is an Integer " + t);
        } else {
            System.out.println(" This is not an Integer" + t);
        }
    }

}

答案 10 :(得分:1)

ArrayList list = new ArryaList();
          list.Add(1);
          list.Add("1");

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

答案 11 :(得分:0)

只需使用Entry(如java.util.Map.Entry中)作为列表类型,然后使用(java.util.AbstractMap的)SimpleImmutableEntry填充它:

List<Entry<Integer, String>> sections = new ArrayList<>();
sections.add(new SimpleImmutableEntry<>(anInteger, orString)):

答案 12 :(得分:0)

对我来说,这种方法在 jdk 16 中工作得很好

import java.util.ArrayList;
public class Array {
    public static void main(String[] args) {
        ArrayList arrayList= new ArrayList();
        arrayList.add("alien");
        arrayList.add(1);
        arrayList.add(0,'b');
        System.out.println(arrayList);
        System.out.println((arrayList.get(0)) instanceof Integer);
    }
}

输出

[b, alien, 1]
false