2013-02-08 47 views
1
Class Order 
{ 
    String name; 
    Order(String n) 
    { name = n; } 

//setter and getters of name 
} 

Order a = new Order("same"); 
Order b = new Order("same"); 
Order c = new Order("diff"); 

List<Order> nameList// a,b,c 

我想对象属性值比较列表里面

seperate list of Orders 
    List<Order> dupList// a,b 
    List<Order> nondupList// c 

现在我要检查相同的名称是否在“名称列表”的多个订单可用。

我实现了使用List的索引并与其他索引List Orders进行比较。

但有没有其他更好的方法来实现这一点。

+0

当你找到同样的名字时,你想要做什么? –

+0

感谢您的回复....我想将它们作为单独的列表 – sunleo

+0

因此,您希望将它们全部分开,或者只是复制?你能发布一些给定输入的预期输出吗? –

回答

1

也许另一种方式可能是 - 重写hashCode方法和equals方法。在计算字符串名称时生成hasCode。

public class Order { 
    String name; 

    public Order(String n) { 
     name = n; 
    } 

    // setter and getters of name 
    @Override 
    public int hashCode() { 
     int h = 0; 
     int len = name.length(); 
     for (int i = 0; i < len; i++) 
      h = 31 * h + name.charAt(i); 
     return h; 
    } 
    @Override 
    public boolean equals(Object obj) { 
     if(obj == null) 
      return false; 
     else if(this.hashCode() == obj.hashCode()) 
      return true; 
     return false; 
    } 
} 

...

List<Order> nameList = ...;// a,b,c 
Set<Order> nonDuplicate= new HashSet<Order>(nameList); 
+0

谢谢你的回答。 – sunleo

1

如果你想使用纯Java的元素添加到列表,并用适当的比较sort它。然后遍历列表,跟踪前一个元素,做一个控制中断;换句话说,如果元素与之前相同,那么这两个元素都是重复的。如果他们不是(或者是第一个),他们是候选人,你需要等待下一次检查才能找到重复。

如果你不想排序,你可以添加元素到一个集,因为它们出现;如果在添加元素之前它已经在集合中,您可以将其添加到重复集合中。您可以在两套设备上进行检查,或者从完整设备中删除最后的重复设备。您可以使用任何集合,但由于Set具有快速包含方法,因此Set效率更高。

如果您可以使用库,则可以使用Guava并将所有内容添加到多重集(http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Multiset.html)然后遍历多重集,并且每个元素都有一个计数。

+0

谢谢,我会尝试。 – sunleo

0

您可以使用Map>,获取给定名称的列表,如果为null,则创建并放入,在该列表中添加当前顺序。