java - 如何从Java中的并行数组中删除重复项?

标签 java arrays parallel-processing parallel-arrays

因此,我开始学习 Java,并想知道如何从源数组中一次性存储字符串和 int 类型的并行数组。例如,我有两个彼此并行的数组,一个将电话号码存储为字符串,另一个将通话持续时间存储为从每个电话号码获取的 int。

String[] phoneNumbers;           
    phoneNumbers = new String[100];
    int[] callDurations = new int[phoneNumbers.length];
    int size = 0;

    phoneNumbers[0] = "888-555-0000";
    callDurations[0] = 10;
    phoneNumbers[1] = "888-555-1234";
    callDurations[1] = 26;
    phoneNumbers[2] = "888-555-0000";
    callDurations[2] = 90;
    phoneNumbers[3] = "888-678-8766";
    callDurations[3] = 28;

    size = 4;

我编写了一个方法来查找特定电话号码的详细信息,例如特定调用“888-555-1234”的持续时间 这是该方法以及我如何调用它:

public static void findAllCalls(String[] phoneNumbers, int[] callDurations, int size, String targetNumber) {
    int match;
    System.out.println("Calls from " + targetNumber + ":");
    match = find(phoneNumbers, size, 0, targetNumber);

    while (match >= 0) {
        System.out.println(phoneNumbers[match] + " duration: " + callDurations[match] + "s");

        match = find(phoneNumbers, size, match + 1, targetNumber);

    }
}

System.out.println("\n\nAll calls from number: ");
    findAllCalls(phoneNumbers, callDurations, size, "888-555-1234");

这段代码的输出是:

All calls from number: 
Calls from 888-555-1234:
888-555-1234 duration: 26s
888-555-1234 duration: 28s

Process finished with exit code 0

然而,我想要得到的输出是:

All calls from number: 
Calls from 888-555-1234:
888-555-1234 duration: 54s


Process finished with exit code 0

(26 秒 + 28 秒)

在java中如何确保并行数组中没有存储重复项并获取每个电话号码的总持续时间,而不是将它们单独存储在数组中?

最佳答案

正如之前的答案中已经指出的,您可以使用 map - 将避免电话号码和通话持续时间( Java code to Prevent duplicate <Key,Value> pairs in HashMap/HashTable )中的重复。

或者,如果您想坚持使用 String 实现,则可以更改 findAllCalls() 方法中的逻辑。

public static void findAllCalls(String[] phoneNumbers, int[] callDurations, int size, String targetNumber) 
{
   int match;
   System.out.println("Calls from " + targetNumber + ":");
   //match = find(phoneNumbers, size, 0, targetNumber);
   int i = 0, duration = 0;
   while (i<size)
    {
        if(phoneNumbers[i].equals(targetNumber))
            duration+=callDurations[i];
        i++;
      //System.out.println(phoneNumbers[match] + " duration: " + callDurations[match] + "s");
      //match = find(phoneNumbers, size, match + 1, targetNumber);
   }
   System.out.println(targetNumber+" duration : "+duration+"s");
}

关于java - 如何从Java中的并行数组中删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32684197/

相关文章:

c - 字符串数组指针/数组名称的有效赋值是什么?

javascript - 对动态填充的对象数组进行排序

makefile - 如何编写Makefile以使用GNU Make自动检测并并行化构建?

c++ - 并行化深度优先搜索 C++

java - Java中如何使用不同的ClassLoader重新加载已加载的类?

java - 如何使用 JNA 为具有多个返回值的 go 函数编写接口(interface)

php - 大型数组的 PHP QuickHash 经验

c# - C# 的并行编程模式?

Java当前时间需要递增的方法

javascript - MSsql 数据库中的表级通知