我将名称存储在数组列表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);
}
}
}
答案 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);
}