这里我将在列表中获得许多CustomizableMenus对象,所以我想查找是否有任何两个CustomizableMenus对象包含相同的cust.getComponentState(); 然后我想找到getComponentState();在这里,我发布了我的代码。如何从列表中获取值。
for(CustomizableMenus cust : ra.getAction().getCustomizablemenu()){
cust.getComponentId();
cust.getComponentIdentification();
cust.getComponentName();
cust.getComponentState();
custList.add(cust);
System.out.println("cust menus in ctrl custid "+ cust.getComponentId()+"component name is "+cust.getComponentName()+"identification "+cust.getComponentIdentification());
}
答案 0 :(得分:1)
您必须将n
项与n
项进行比较,这样您才能运行复杂度为O(n^2)
的循环以及if语句的复杂性:
无论您使用的是Array
,List
,Map
,......逻辑都是相同的。
一般代码:
for(Item item1:yourList.getItems()){
for(Item item2:yourList.getItems())
if(item2!=item1) //not compare the item with it's self
//if they have the same component state
if(item2.getComponentState() == item1.getComponentState()){
//..do something
}
}
关于您的情况:
for(CustomizableMenus cust1 : ra.getAction().getCustomizablemenu()){
for(CustomizableMenus cust2 : ra.getAction().getCustomizablemenu()){
if(cust1 != cust2 ) //not compare the item with it's self
//if they have the same component state
if(cust1 .getComponentState() == cust2 .getComponentState()){
//..do something
}
}
修改强>
为什么我需要使用
if(cust1 != cust2 )
你必须在这里循环。让我们看两个例子:
第一次进入循环时,你得到列表的第一项,所以cust1
(现在是列表的第一个元素)。现在我们进入第二个循环,你得到了第一个再次列出该项目。现在cust1
和cust2
是相同的(列表的第一项)。我们不想比较它们(cust1 .getComponentState() == cust2 .getComponentState())
因为它们是同一个项目
第二个循环继续比较cust1
(仍然是列表的第一个项目)和cust2
,现在是List的第二个项目。等等...
当第二个循环退出时,cust1
正在成为List的第二个项目,之后我们进入第二个循环。首先我们比较cust1
(现在是第二个项目)列表)与cust2
(现在是列表的第一项)。然后我们将cust1
与cust2
进行比较(现在恰好是List的第二项,但cust1
是List的第二项,因此我们无需进行比较它们是(cust1 .getComponentState() == cust2 .getComponentState())
因为它是同一个项目。
我希望您理解我使用if(cust1 != cust2 )
<强>最后:强>
此解决方案仅用于学术目的。 检查以下链接,了解性能方面的更佳解决方案。
http://javarevisited.blogspot.gr/2015/06/3-ways-to-find-duplicate-elements-in-array-java.html
答案 1 :(得分:0)
基本上您正在寻找查找机制。在每次迭代时,您可能希望将该对象存储在地图中。地图可以将组件状态作为键,将对象作为值在
行上Map<String, CustomizableMenus> map = new HashMap<>();
向地图添加条目
map.put(cust.getComponentState(), cust);
然后你只需使用
查找地图 map.get(cust.getComponentState())
当然,您可以再次遍历列表中的对象(如果列表大小很大,则可能会出现问题)