首页 > Java在一组顾客数组中,找出何两个customers的电话号码是否相同

Java在一组顾客数组中,找出何两个customers的电话号码是否相同

有一个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;
    }
【热门文章】
【热门文章】