Java 处理具有不同对象的arraylist中的arraylist

Java 处理具有不同对象的arraylist中的arraylist,java,object,arraylist,Java,Object,Arraylist,我有三个不同的数组列表: ArrayList<type1> alista = new ArrayList<>(); ArrayList<type2> blistb = new ArrayList<>(); ArrayList<type3> clistc = new ArrayList<>(); ArrayList alista=new ArrayList(); ArrayList blistb=新的ArrayList();

我有三个不同的数组列表:

ArrayList<type1> alista = new ArrayList<>();
ArrayList<type2> blistb = new ArrayList<>();
ArrayList<type3> clistc = new ArrayList<>();
ArrayList alista=new ArrayList();
ArrayList blistb=新的ArrayList();
ArrayList clistc=新的ArrayList();
然后我创建一个新的数组列表,并将这3个数组列表放入其中:

ArrayList<Object> all_lists = new ArrayList<Object>();
all_lists.add(alista);
all_lists.add(blistb);
all_lists.add(clistc);
ArrayList all_list=new ArrayList();
所有列表。添加(alista);
所有列表。添加(blistb);
所有列表。添加(clistc);
如何在所有_列表中添加或删除对象:alista、blistb和clistc?我想在main()中的方法之间来回传递所有的_列表。我知道这样做可能是错误的,但我想在我用更好的方式解决之前,让它发挥作用


例如,我如何从中获取blistb,然后添加我创建的一种类型的type2,然后删除一种类型的type2(从blistb中)。然后将其放回(或创建新的所有列表?)所有列表?

您应该将
所有列表
声明为
列表的
列表
;然后,您可以在特定索引处直接向
列表添加和删除项目

List<List> all_lists = new ArrayList<>();
all_lists.add(new ArrayList<A>(Arrays.asList(new A(1), new A(2), new A(3))));
all_lists.add(new ArrayList<B>(Arrays.asList(new B(4), new B(5))));
all_lists.add(new ArrayList<C>(Arrays.asList(new C(6))));
all_lists.get(1).add(new B(3));//add element to B List
List all_List=new ArrayList();
添加(新的ArrayList(Arrays.asList)(新的A(1)、新的A(2)、新的A(3));
添加(新的ArrayList(Arrays.asList)(新的B(4),新的B(5));
添加(新的ArrayList(Arrays.asList)(新的C(6));
所有_列表。获取(1)。添加(新的B(3))//将元素添加到B列表中

所有_列表
应声明为
数组列表
(使用原始类型,需要
@SuppressWarnings(“未选中”)

@SuppressWarnings(“未选中”)
ArrayList all_list=新建ArrayList();
所有列表。添加(alista);
所有列表。添加(blistb);
所有列表。添加(clistc);
clistc.add(新类型3());
所有列表。获取(0)。添加(新类型1());//将type1对象添加到alista
所有列表。获取(1)。添加(新类型2());//将type2对象添加到blistb
所有_列表。获取(2)。删除(0);//拆下clistc的第一个元件
但是,创建一个包装类而不是
all\u list
,将是一种更好、更类型安全的面向对象方法:

类ListWrapper{ 私人名单aListA; 私有列表bListB; 私人名单; //构造函数、getter/setter 公共无效添加类型1(类型1 t1){ aListA.add(t1); } //等等。 }
您只需跟踪哪个阵列是哪个: 在:


如果我理解正确,您希望能够传递所有数据并对列表进行更改。首先,我会将列表的类型更改为列表界面。这并不影响代码的功能,但如果您希望在将来更改列表实现,则会更容易,并且还可以保存一些字符:

List<Type1> alista = new ArrayList<>();
List<Type2> blistb = new ArrayList<>();
List<Type3> clistc = new ArrayList<>();
您不需要“把列表放回去”,因为Java是通过引用传递的。当您从AllList获取blistb时,您将获得对同一列表对象的引用。对引用的任何更改都是对原始列表的更改


我更改了类型和变量名,使之更加标准化。

使用ArrayList会出现不兼容的类型错误,但ArrayList不会?那么您的代码示例不起作用了?是的,必须使用原始类型,我更新了代码
ArrayList
每次尝试正确访问
all_列表中的元素时,都需要强制转换为
List
ArrayList
为什么构造函数中有这些私有项:public alllist(private List alista,private List blistb,private List clistc){这是一个输入错误,我将更新答案。
all_lists.get(1).remove(2);
List<Type1> alista = new ArrayList<>();
List<Type2> blistb = new ArrayList<>();
List<Type3> clistc = new ArrayList<>();
List<List<Object>> allLists = new ArrayList<Object>();
List<Type2> blistbReference = allLists.get(1); // Index starts from 0
public class AllLists {
    private List<Type1> alista;
    private List<Type2> blistb;
    private List<Type3> clistc;

    public AllLists(List<Type1> alista, List<Type2> blistb, List<Type3> clistc) {
        this.alista = alista;
        this.blistb = blistb;
        this.clistc = clistc;
    }

    public List<Type1> getAlista() {
        return alista;
    }

    public List<Type1> getBlistb() {
        return blistb;
    }

    public List<Type1> getClistc() {
        return clistc;
    }
}
// ......

    AllLists allLists = new AllLists(alista, blistb, clistc);
Type2 t = new Type2;
allLists.getBlistb().add(t);