在列表<object>中查找相同的值?

时间:2016-11-10 06:38:57

标签: java

这里我将在列表中获得许多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());

}

2 个答案:

答案 0 :(得分:1)

您必须将n项与n项进行比较,这样您才能运行复杂度为O(n^2)的循环以及if语句的复杂性:

无论您使用的是ArrayListMap,......逻辑都是相同的。

一般代码:

 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(现在是列表的第一个元素)。现在我们进入第二个循环,你得到了第一个再次列出该项目。现在cust1cust2是相同的(列表的第一项)。我们不想比较它们(cust1 .getComponentState() == cust2 .getComponentState())因为它们是同一个项目

第二个循环继续比较cust1(仍然是列表的第一个项目)和cust2,现在是List的第二个项目。等等...

当第二个循环退出时,cust1正在成为List的第二个项目,之后我们进入第二个循环。首先我们比较cust1(现在是第二个项目)列表)与cust2(现在是列表的第一项)。然后我们将cust1cust2进行比较(现在恰好是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())

当然,您可以再次遍历列表中的对象(如果列表大小很大,则可能会出现问题)