如何使用整数和字符串输入类型创建ArrayList
?如果我创建一个:
List<Integer> sections = new ArrayList <Integer>();
这将是Integer
类型ArrayList
。
如果我创建一个:
List<String> sections = new ArrayList <String>();
将是String
类型。
如何创建可以采用整数和字符串输入类型的ArrayList
?
谢谢。
答案 0 :(得分:59)
你可以这样做:
List<Object> sections = new ArrayList <Object>();
(推荐)另一种可能的解决方案是使用Integer和其他String两个参数创建自定义模型类。然后使用该对象的ArrayList
。
答案 1 :(得分:13)
您可以使用Object存储任何类型的值,例如int,float,String,类对象或任何其他java对象,因为它是所有类的根。例如,
宣布课程
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;
}}
主要功能代码,它创建新的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());
}
}
您可以在此链接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)
这取决于用例。请你详细描述一下吗?
如果要添加字符串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