Я считаю, что решение O(n*m)
неизбежно, , если не создана более сложная инфраструктура структуры данных - эффективные объединения в базе данных реализованы с использованием индексов, хэшей и т. д. Также следует иметь в виду, что правильная реализация должна учитывать случай, когда более одного объекта в list2
имеет тот же object1id
- мой код работает в этом случае, но все решения, которые просто добавляют obj2.object1id
к Set
или как клавиши в Map
, не удастся.
Но стоит ли это сложность реализации? если входные списки малы, O(n*m)
решение будет работать нормально. Вот мое предложение, используя старые добрые вложенные циклы:
List list3 = new ArrayList<>();
for (Object1 obj1 : list1) {
boolean found = false;
for (Object2 obj2 : list2) {
if (obj1.id.equals(obj2.object1id)) {
list3.add(new Object3(obj1, obj2));
found = true;
}
}
if (!found)
list3.add(new Object3(obj1, null));
}
Для работы выше, я использую выходной объект, который выглядит так:
public class Object3 {
private Object1 obj1;
private Object2 obj2;
public Object3(Object1 obj1, Object2 obj2) {
this.obj1 = obj1;
this.obj2 = obj2;
}
}
Согласно этой статье :
Назначение локального IPv4-адреса канала на интерфейсе основывается исключительно на состоянии интерфейса и не зависит от каких-либо другие протоколы, такие как DHCP. Хост НЕ ДОЛЖЕН изменять свое поведение и использовать другие протоколы, такие как DHCP, потому что хост назначил интерфейсу локальный IPv4-адрес для интерфейса.
blockquote>Поэтому мы не можем изменить его поведение, когда оно включено.
LinkLocalDelayed
успешно, потому что исходный статус былLinkLocalDelayed
.Для IPv6 я нашел ответ на msdn . Похоже, у них похожее поведение. Если один из них включен, он не сможет быть отключен.