如何避免arraylist,java的嵌套for循环

时间:2019-06-24 07:40:44

标签: java dictionary arraylist

我有两个arraylist,基于某些相等条件,我正在将值设置为一个列表, 下面是代码,如何避免嵌套for循环,如何使用map或任何其他方式优化操作,

Public Class Record
    Dim materiaalnummer As String
    Dim type As String 'Config or prefered
    Dim materiaalstatus As String
    Dim children As New List(Of String)

    Public Property materiaalnummerInfo()
        Get
            Return materiaalnummer
        End Get
        Set(value)
            materiaalnummer = value
        End Set
    End Property
    Public Property typeInfo()
        Get
            Return type
        End Get
        Set(value)
            type = value
        End Set
    End Property
    Public Property materiaalstatusInfo()
        Get
            Return materiaalstatus
        End Get
        Set(value)
            materiaalstatus = value
        End Set
    End Property
    Public Property childrenInfo()
        Get
            Return children
        End Get
        Set(value)
            children = value
        End Set
    End Property
End Class

1 个答案:

答案 0 :(得分:2)

我建议是否可以在is aTerm类之间建立TriggerTerm关系(似乎是这样),应该是这样;

class Terms {

    private String codeNumber;

    private String termNumber;

    private String startDate;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Terms)) return false;

        Terms terms = (Terms) o;
        if (!codeNumber.equals(terms.codeNumber)) return false;
        return termNumber.equals(terms.termNumber);
    }

    @Override
    public int hashCode() {
        int result = codeNumber.hashCode();
        result = 31 * result + termNumber.hashCode();
        return result;
    }
}

class TriggerTerms extends Terms {
    // Inherit setters and getters from the super class as well as `equals` and `hashCode` function.
}

我从代码中省略了getter和setter方法。另外,请不要执行equalshashCode实现。我只使用了codeNumbertermNumber变量。

如果triggerTermsterms列表中都没有重复的值,请使用java.util.HashSet而不是List。因为下面的示例我使用的是contains()函数。在ArrayList实现中,contains()O(n)的时间复杂度分别为indexOf(),但在HashSet中,由于其实现,时间复杂度为O(1)。如果您使用

因此,只需使用以下代码片段;

for (TriggerTerms tt : triggerTerms)  {
    if (terms.contains(tt)) {
        tt.setStartDate(terms.get(terms.indexOf(tt)).getStartDate());
    }
}