当前位置:  开发笔记 > 编程语言 > 正文

如何在ArrayList中搜索StringBuffer对象?

如何解决《如何在ArrayList中搜索StringBuffer对象?》经验,为你挑选了1个好方法。

以下是我正在使用的代码段.

Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
ArrayList al = new ArrayList();
while (N-- > 0) {
   str = new StringBuffer(sc.next());
   if (al.contains(str)) {
       System.out.println("Duplicate value " + str);
   } else {
       al.add(str);
   }    
}

如果输入是:4

ABC

FGH

DFG

ABC

当预期输出为:时显示空白输出:

重复值abc

我在哪里错了?



1> Eran..:

StringBuffer不会覆盖Object's equals,所以当你搜索你是否List包含某个StringBuffer实例时,你正在检查确切的引用是否出现在List.

您可以使用a HashSet来避免重复,因为String覆盖equals,然后(如果必须)List从元素创建HashSet.

BTW,StringBuilder效率更高StringBuffer(只有在计划从多个线程访问它时才应该使用).

Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
ArrayList al = new ArrayList();
Set uniques = new HashSet<>();
while (N-- > 0) {
   uniques.add(sc.next());
}
for (String s : uniques)
    al.add (new StringBuffer(s));

如果您必须报告重复项,则需要进行少量更改:

Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
ArrayList al = new ArrayList();
Set uniques = new HashSet<>();
while (N-- > 0) {
   String str = sc.next();
   if (!uniques.add(str))
       System.out.println("Duplicate value " + str);
}
for (String s : uniques)
    al.add (new StringBuffer(s));

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有