创建一个包含多种对象类型的arraylist?

如何使用整数和字符串输入类型创建一个arraylist? 如果我创建List sections = new ArrayList (); 这将是一个Integer类型的arrayList。 如果我创建List sections = new ArrayList (); 这将是String类型。 如何创建一个可以同时采用int和String输入类型的arraylist? 谢谢

用户定义的类arrays列表示例

 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 al=new ArrayList(); 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

你可以这样做:

 List sections = new ArrayList (); 

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

您可以使用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. main函数代码,它创建新的person对象,int,float和string类型,然后添加到List中,并使用for循环进行迭代。 识别每个对象,然后打印该值。

      Person p = new Person(); p.setPersonId(1); p.setPersonName("Tom"); List lstObject = new ArrayList(); 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()); } } 

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

(1) ArrayListlist = 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); 

我也对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 items = new ArrayList(); items.add(new Stuff(label, value)); for (Stuff item: items) { doSomething(item.getLabel()); // returns String doSomething(item.getValue()); // returns Integer } 

你不知道类型是Integer还是String,那么你不需要Generic。 走老风格。

 List list= new ArrayList (); list.add(1); list.add("myname"); for(Object o = list){ } 

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

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

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

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

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

或者你有可能是单词或数字的数据? 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来满足您的需求。 再次,这取决于您的需求! 🙂

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

 public interface IMyDataObj { public String getInfo(); } 

对于字符串:

 public class MyStringDataObj implements IMyDataObj { final String info; public MyStringDataObj(String info){ this.info = info; } @Override public String getInfo() { return info; } } 

对于整数:

 public class MyIntegerDataObj implements IMyDataObj { final Integer info; public MyIntegerDataObj(Integer info) { this.info = info; } @Override public String getInfo() { return Integer.toString(info); } } 

最后列表将是: List

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

相反 – 做GV推荐和我即将推荐的内容,创建一个包含int和String的自定义类并创建它的ArrayList。 他的回答是1+!

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

ListmyList = new ArrayList();

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

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

myList.add("object");

myList.add(new Object());

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

您只需将不同“类型”的对象添加到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  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); } } } 
 ArrayList list = new ArryaList(); list.Add(1); list.Add("1"); 

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