我有两个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
答案 0 :(得分:2)
我建议是否可以在is a
和Term
类之间建立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方法。另外,请不要执行equals
和hashCode
实现。我只使用了codeNumber
和termNumber
变量。
如果triggerTerms
和terms
列表中都没有重复的值,请使用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());
}
}