有一个Customer 类型它有个phonenumber的属性,请写一个java的method来确定一个数组中任何两个customers的电话号码是否相同,请返回true如果有两个customer的电话相同;假定customer的数量很大,请提供你认为最高效的method,并且列出几个测试方法,然后实现一格测试方法。 这是一道外企面试题,请帮忙看看,谢谢!
我使用了java.util.Set
的元素唯一性写了两个方法:
方法一 把Customer数组的phoneNumber放入LinkedHashSet
,如果Set.add()
返回false
说明这个Customer数组中存在相同的手机号码
public boolean hasSamePhoneNumber(Customer[] customers) {
if (null == customers || customers.length < 1)
return Boolean.FALSE;
LinkedHashSet<String> ts = new LinkedHashSet<String>();
for (Customer customer : customers) {
if (!ts.add(customer.getPhoneNumber()))
return Boolean.TRUE;
}
return Boolean.FALSE;
}
方法二这个方法与方法一其实没有本质的区别,都是依据java.util.Set
唯一性。写这个方法的时候,本来是打算先把Customer数组的元素根据phoneNumber做一次排序,排序之后判断是否重复会非常快速。
public boolean hasSamePhoneNumber2(Customer[] customers) {
if (null == customers || customers.length < 1)
return Boolean.FALSE;
TreeSet<Customer> ts = new TreeSet<Customer>(new Comparator<Customer>() {
public int compare(Customer o1, Customer o2) {
return o1.getPhoneNumber().compareTo(o2.getPhoneNumber());
}
});
ts.addAll(Arrays.asList(customers));
return customers.length == ts.size() ? Boolean.FALSE : Boolean.TRUE;
}
正文完