equals()
( javadoc) должен определить отношение эквивалентности (это должно быть рефлексивно , симметричный , и переходный ). Кроме того, это должно быть последовательно (если объекты не изменяются, то это должно продолжать возвращать то же значение). Кроме того, o.equals(null)
должен всегда возвращать false.
hashCode()
( javadoc) должен также быть последовательны (если объект не изменяется с точки зрения equals()
, это должно продолжать возвращать то же значение).
отношение между этими двумя методами:
Каждый раз, когда
a.equals(b)
, тогдаa.hashCode()
должно быть то же какb.hashCode()
.
, Если Вы переопределяете один, тогда необходимо переопределить другой.
Использование тот же набор полей, которые Вы используете для вычисления equals()
для вычисления hashCode()
.
Использование превосходные классы помощника EqualsBuilder и HashCodeBuilder от библиотека Commons Lang Apache. Пример:
public class Person {
private String name;
private int age;
// ...
@Override
public int hashCode() {
return new HashCodeBuilder(17, 31). // two randomly chosen prime numbers
// if deriving: appendSuper(super.hashCode()).
append(name).
append(age).
toHashCode();
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Person))
return false;
if (obj == this)
return true;
Person rhs = (Person) obj;
return new EqualsBuilder().
// if deriving: appendSuper(super.equals(obj)).
append(name, rhs.name).
append(age, rhs.age).
isEquals();
}
}
При использовании основанного на хеше Набор или Карта такой как [1 117] HashSet, LinkedHashSet, HashMap, Хеш-таблица , или WeakHashMap, удостоверяется, что хэш-код () ключевых объектов, которые Вы помещаете в набор, никогда не изменяется, в то время как объект находится в наборе. Пуленепробиваемый способ гарантировать это состоит в том, чтобы сделать Ваши ключи неизменными, , который обладает также другими преимуществами .
Вот то, как документация официального ipttable учит нас. Видят здесь
, Добавляют эти две строки в/etc/network/interfaces:
pre-up iptables-restore < /etc/iptables.rules
post-down iptables-save > /etc/iptables.rules
строка "поствниз iptables-сохраняет>/etc/iptables.rules", сохранит правила, которые будут использоваться на следующей начальной загрузке.
Используйте команду iptables-сохранения вместо этого. Правила брандмауэра никогда не должны входить в rc.local сценарий. rc.local является последней вещью, которая будет выполняться. Если правило блока было помещено в rc.local существует маленький период времени, где взломщик может использовать правило, не существующее. В то время как это, вероятно, не имеет значения с этой ситуацией, все еще лучше не войти в дурную привычку, которая может укусить Вас позже.
iptables-save > some-file-path
сохраняет правила, и затем Вы восстановили бы их через iptables-restore < some-file-path
в rc.local
. Или установка iptables-persistent
, который делает это во время начальной загрузки как услуга.
– Hovercraft Full Of Eels
14.05.2020, 10:30