Подтвердить что ты не робот

Создать ArrayList с несколькими типами объектов?

Как мне создать ArrayList с целочисленным и строковым типами ввода? Если я создам один как:

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

это будет ArrayList типа Integer. Если я создам один как:

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

это будет типа String. Как я могу создать ArrayList который может принимать как целочисленные, так и строковые типы ввода? Спасибо.

4b9b3361

Ответ 1

Пример списка классов массивов, определенных пользователем

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

Ответ 2

Вы можете сделать это как:

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

(Рекомендуемый) Еще одним возможным решением могло бы стать создание пользовательского класса модели с двумя параметрами: одним целым и другой строкой. Затем используйте ArrayList этого объекта.

Ответ 3

Вы можете использовать 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 и тип строки, а затем добавляется в список и повторяется с использованием цикла 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());
        }
    }
    

Более подробную информацию о классе объектов можно найти по этой ссылке Объект в java

Ответ 4

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

Ответ 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
}

Ответ 6

Вы не знаете, что тип Integer или String вам не нужен. Пойдите со старым стилем.

List list= new ArrayList ();

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

for(Object o = list){

} 

Ответ 7

Это зависит от варианта использования. Не могли бы вы описать это больше?

  • Если вы хотите иметь возможность добавлять оба за один раз, чем вы можете сделать, что хорошо описано @Sanket Parikh. Поместите Integer и String в новый класс и используйте это.
  • Если вы хотите добавить список либо String, либо int, но только один из них за раз, тогда убедитесь, что это List<Object>

    который выглядит хорошо, но только для первого взгляда! Это не очень хорошая модель. Вам нужно будет проверить, какой тип объекта у вас есть каждый раз, когда вы получаете объект из своего списка. Также этот тип списка может содержать любые другие типы. Так что нет, это не хорошее решение. Хотя, возможно, для новичков он может быть использован. Если вы выберете это, я бы рекомендовал проверить, что такое "instanceof" в Java.

  • Я бы настоятельно рекомендовал пересмотреть ваши потребности и подумать о том, может быть, ваш настоящий nead должен инкапсулировать целые числа в List<Integer> и строки в отдельный List<String>

Могу ли я рассказать вам метафору о том, что вы хотите сделать сейчас? Я бы сказал, что вы хотите составить список, который может содержать кофе beans и кафе. Эти типы объектов совершенно разные! Почему они помещаются на одну полку?:)

Или у вас есть данные, которые могут быть словом или числом? Yepp! Это будет иметь смысл, оба они являются данными! Затем попробуйте использовать один объект для того, который содержит данные как String, и при необходимости может быть переведен на целочисленное значение.

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

Для строки:

public class MyStringDataObj implements IMyDataObj {

final String info;

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

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

Для 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>

Ответ 8

Вы можете создать List<Object>, но вы действительно не хотите этого делать. Смешанные списки, которые абстрагируются от Object, не очень полезны и являются потенциальным источником ошибок. Фактически тот факт, что ваш код требует такой конструкции, дает вашему коду плохой запах кода и предполагает, что его дизайн может быть отключен. Подумайте о перепроектировании своей программы, чтобы вы не были вынуждены собирать апельсины с орангутанами.

Вместо этого сделайте то, что рекомендует G V, и я должен был рекомендовать, создайте собственный класс, который содержит как int, так и String и создаст ArrayList. 1+ к его ответу!

Ответ 9

Вы всегда можете создать ArrayList из Object s. Но это будет не очень полезно для вас. Предположим, что вы создали ArrayList следующим образом:

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

и добавьте объекты в этот список следующим образом:

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

myList.add("object");

myList.add(new Object());

Вы не столкнетесь с какой-либо проблемой при добавлении и извлечении объекта, но это будет не очень полезно. Вы должны помнить, в каком месте находится каждый тип объекта, чтобы использовать его. В этом случае после извлечения все, что вы можете сделать, это вызвать на них методы Object.

Ответ 10

Вы можете просто добавить объекты diffefent "Types" к экземпляру ArrayList. Не нужно создавать ArrayList. Взгляните на приведенный ниже пример, Вы получите ниже:

 Начало....
 Содержание массива: [String, 1]
 Размер списка: 2
 Это не целая строка
 Это Integer 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);
        }
    }

}

Ответ 11

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

В качестве возвращаемого типа ArrayList является объект, поэтому вы можете добавить любой тип данных в ArrayList, но не рекомендуется использовать ArrayList bcz, существует ненужный бокс и unboxing.