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


有一个Customer 类型它有个phonenumber的属性,请写一个java的method来确定一个数组中任何两个customers的电话号码是否相同,请返回true如果有两个customer的电话相同;假定customer的数量很大,请提供你认为最高效的method,并且列出几个测试方法,然后实现一格测试方法。 这是一道外企面试题,请帮忙看看,谢谢!

面试 java 面试题

柴刀的引导 11 years, 7 months ago

我使用了 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;
    }

蓬蒿人水马辰 answered 11 years, 7 months ago

Your Answer