Java 向arraylist添加其他信息
在arraylist中存储一个附加属性的最佳方法是什么? 假设我将一个对象的ArrayList传递给一个方法,并使用一个附加标志返回一个ArrayListJava 向arraylist添加其他信息,java,arraylist,Java,Arraylist,在arraylist中存储一个附加属性的最佳方法是什么? 假设我将一个对象的ArrayList传递给一个方法,并使用一个附加标志返回一个ArrayList ArrayList<MyObject> list = new ArrayList<MyObject>(); //fill list = myMethod(list); ArrayList list=new ArrayList(); //填满 列表=我的方法(列表); 我想为每个对象得到一个布尔值,但我不想将它直接存
ArrayList<MyObject> list = new ArrayList<MyObject>();
//fill
list = myMethod(list);
ArrayList list=new ArrayList();
//填满
列表=我的方法(列表);
我想为每个对象得到一个布尔值,但我不想将它直接存储在对象中。
所以我的方法之前的数据是:苹果,香蕉,葡萄柚
在myMethod之后:苹果=>true,香蕉=>false,葡萄柚=>false
当不在对象中时,如何存储该附加属性?最好的数据类型是什么?ArrayList不能这样做,对吗?使用一个类,该类有一个
列表
字段和一个列表
字段,其元素是与添加到列表
中的每个MyObject
平行的标志。由于这太麻烦了,只需在MyObject
中添加布尔标志即可。如果无法修改该类,请扩展它并在ExtendedMyObject扩展MyObject
类中添加boolean
标志。如果无法扩展它,请创建一个MyObject
的包装类,该类具有MyObject
字段和boolean
标志。您可以围绕对象创建一个自定义包装,该对象具有Object类型的字段和boolean字段。这是最好的解决方案,因为您可以为字段选择一个有意义的名称。
或者,您可以使用内置类对并创建一个
列表您可以单独维护一个-集中的成员资格将对应于该对象的真值
假设您使用了,您将需要确保MyObject
得到实现和使用。另一种方法是使用字符串
、长
等唯一地标识每个MyObject
,并维护这些ID的集。您可以扩展ArrayList并为其提供一个新属性。例如:
public class MyArrayList<E> extends ArrayList<E>{
private boolean value;
public boolean isValue() {
return value;
}
public void setValue(boolean value) {
this.value = value;
}
}
公共类MyArrayList扩展了ArrayList{
私有布尔值;
公共布尔值(){
返回值;
}
公共void设置值(布尔值){
这个值=值;
}
}
在这里,您可以拥有ArrayList中的所有功能,还可以拥有一个额外的布尔字段
编辑:
如果您的Boolean
值与Originalobject无关,为什么不编写一个包装器类呢?有两种可能解决此问题:
扩展基类MyObject
编写一个包含两个属性的新类,一个用于boolean
,另一个用于MyObject
我建议只返回一个映射到布尔值的源对象(或名称,如果唯一)
Map<MyObject,Boolean> result = myMethod(list);
Map结果=myMethod(列表);
或者,如果名称是唯一的:
Map<String,Boolean> result = myMethod(list);
for (MyObject item : list) {
Boolean result = result.get(item.getName());
if (result) {
...
}
}
Map结果=myMethod(列表);
对于(MyObject项:列表){
布尔结果=result.get(item.getName());
如果(结果){
...
}
}
如果:
MyObject
未实现#hashCode
(因此可能会丢失相等对象的哈希)
- 名称不唯一或不完整
- 如果
结果
比布尔值更复杂
然后我将创建一个包装器,用结果包装MyObject,并返回一个列表
编辑:顺便说一句,如果布尔字段不是对象状态的一部分,也就是说,如果它是某个操作的瞬时结果,我认为您不在MyObject
上包含该布尔字段是正确的。为什么不直接将其存储在对象中?这是最好的方法。你最好让你的对象包含一个布尔实例变量。让一个方法成为公共布尔校验(MyObject o)并调用它。因为它与对象无关。基本上,myMethod将对象显示给用户,并为每个对象获取用户输入(true或false)。基于这个布尔变量,主程序为每个对象执行一些操作。然而,用户输入仅用于此决策,因此将其存储在对象中会很奇怪。使用Map如何?相信我,这不是最好的方法。顺便说一下,您只是为数组中的所有元素设置布尔标志,而不是为数组中的每个元素设置布尔标志。