例如,我引用了mItem
集合的List<mItem> mList
对象。是否可以使用mList
获取对mItem
的引用?
答案 0 :(得分:7)
简短的回答是否定的。列表中的项目不知道它们在列表中。 (当然,除非你在mItem对象中添加对列表的引用。)
答案 1 :(得分:2)
简答:不。
将项添加到列表会将对该对象的引用添加到列表中。它不会影响对象本身。
您可以检查项目是否在特定列表中,mList.contains(mItem)
如果项目位于mList
,则返回true。或者,如果您确实需要,您可以像其他人一样建议实现List的版本,该版本通知每个项目列表具有对该项目的引用。但开销会相当混乱。
元问题:为什么需要此功能?
答案 2 :(得分:2)
正如jzd所说......你可以在你的mItem
课程中添加一个字段(例如referenceHolder
)
mItem(Object ref){
referenceHolder = ref;
}
带有List的类:
mList.add(new mItem(this));
这样的东西应该可以工作:)但它有点奇怪;),因为通常“列表中的项目不知道它们在列表中。”
编辑:如前所述 - “一个对象应该是多个集合的成员” - 所以你需要将我的referenceHolder的类型更改为某个列表或数组,以使其能够实现。 EDIT2:这只是对持有该列表的对象的引用(如果一个对象将有多个列表,你将无法知道他们的女巫是持有那个指定的mItem
对象),引用List本身你将会需要(如评论中所述;))自定义列表实现在this
方法中使用add()
添加对存储对象的引用。
答案 3 :(得分:0)
如果您拥有所有列表的容器,则可以在每个列表上调用contains
以查找该项目所在的列表。
注意:对于列表,您可以多次使用相同的元素,并且可以跨多个列表。
BTW:如果你不想在列表中重复并且不关心元素的顺序,那么Set可能是你的最佳选择。