打印包含重复条目的数组列表

时间:2016-02-25 03:50:18

标签: java if-statement arraylist

我将名称存储在数组列表logcall中并相应地打印出来。但是当有重复时,我怎么只打印一次而不是多次打印它们?

public static void displayHistory()
{
    for(Call allCalls : logCall) 
    {
        if(logCall!=null)
        {
            String name = allCalls.getName();
            Long phone = allCalls.getPhoneNumber();
            String type = allCalls.getType();
            String time = allCalls.getTime();
            String date = allCalls.getDate();

            String phoneStr = Long.toString(phone);

            if(name.equals("N/A"))
            {
                System.out.println( PhoneBook.formatNum(phoneStr) + " (" + type + ") " +date + " " + time);
            }
            else if(search(name) > 1)
            {
                System.out.println( name + " (" +search(name)+ ") " );
            }
            else
            {
                System.out.println( name + " (" + type + ") " + date + " " + time);
            }

        }
    }

2 个答案:

答案 0 :(得分:3)

我想到的一个简单的想法是将输出存储在一个字符串中,并使用字符串的.contains方法在添加新条目之前搜索重复项。然后你只需要在最后打印输出字符串。

答案 1 :(得分:2)

使用HashSet。 Logan Kulinski说,这比在字符串中检查它要高效得多,因为检查字符串需要N次操作,复杂性将是N ^ 2.

例如,

Collection<String> seen = new HashSet<String>();

for (.....) {    //process the items here
    //format the stuff and what not
    if (!seen.contains(currentString)) {
        seen.add(currentString);
        print(currentString);
}