成对字符串的数组?

时间:2018-02-22 16:13:32

标签: java

我有一个检查ArrayList中重复值的方法,我希望它返回包含重复值的那些EzVarIntegers的名称(包含名称和值以及其他与之无关的值)。

我在考虑使用两个并排的数组,这些数组的EzVarIntegers名称在同一个索引上具有重复值。因此,具有相同值X的两个EzVarIntegers将在ArrayOne [k]和ArrayTwo [k]中。

我对此很陌生,所以我想知道是否有更聪明的方法来解决这个问题?

public ArrayList<String> dupCheck(ArrayList<EzVarInteger> RoiNumbs) {
    ArrayList<String> Dups = new ArrayList<String>();

    for (int j=0;j<RoiNumbs.size();j++) {
        for (int k=j+1;k<RoiNumbs.size();k++) {
            if (k!=j && RoiNumbs.get(k).getValue() == RoiNumbs.get(j).getValue()) {
                //TODO see question
            }
        }
    }

    return Dups;
}

3 个答案:

答案 0 :(得分:1)

尝试使用Map(参见示例)

public static void main(String[] args)
{

List<String> strings = new ArrayList<>();

strings.add("a");
strings.add("b");
strings.add("a");
strings.add("c");

Map<String, Integer> counts = new HashMap<>();

for (String str : strings)
  {
    if (!(counts.containsKey(str)))
      {
        counts.put(str, 1);
      } 
  }

for (Map.Entry<String, Integer> entry : counts.entrySet())
  {
    System.out.println(entry.getKey() + " = " + entry.getValue());
  }

}

答案 1 :(得分:0)

请使用Set检查重复项。所以,

Set<Integer> set = new HashSet<>();
List<String> duplicateList = new ArrayList<>();

//if it is not present in the set then add it. If it present then add the  //name of the EzVarInteger object in the output list

for(EzVarInteger ez: RoiNumbs){
   if(!set.contains(ez.getValue)){
       set.add(ez.getValue());
   }else{
       duplicateList.add(ez.getName());
   }
}

//print the duplicate names
   for(String name:duplicateList){
      System.out.println(name);
}

希望这会对你有所帮助。

答案 2 :(得分:0)

您提出的算法具有计算成本O(n * n)

您可以对列表进行排序。这是在O(n * log(n))中完成的。然后遍历它以找到重复的元素。这是在O(n)中完成的。这样算法的计算代价为O(n * log(n)),这是更优的。