Форум программистов, компьютерный форум, киберфорум
Наши страницы
HighPredator
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 1.

Для себя 0x02

Запись от HighPredator размещена 10.01.2018 в 15:58
Метки java

Pair
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public abstract class Pair<T1, T2> {
    public abstract T1 getFirst();
    public abstract T2 getSecond();
    public abstract void setFirst(T1 first);
    public abstract void setSecond(T2 second);
 
    @Override
    public int hashCode() {
        final int firstHash = getFirst() == null ? 0 : getFirst().hashCode();
        final int secondHash = getSecond() == null ? 0 : getSecond().hashCode();
 
        return 31 * Math.max(firstHash, secondHash) + Math.min(firstHash, secondHash);
    }
 
    @Override
    public boolean equals(Object obj) {
        if (obj == null)
            return false;
 
        if (this == obj)
            return true;
 
        if (!(obj instanceof Pair))
            return false;
 
        Pair<?, ?> other = (Pair<?, ?>) obj;
 
        return new EqualityBuilder()
                .append(this.getFirst(), other.getFirst())
                .append(this.getSecond(), other.getSecond())
                .areEqual();
    }
 
    @Override
    public String toString() {
        return "Pair = {" + getFirst() + "," + getSecond() + "}";
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class MutablePair<T1, T2> extends Pair<T1, T2> {
    private T1 first;
    private T2 second;
 
    public MutablePair(T1 first, T2 second) {
        this.first = first;
        this.second = second;
    }
 
    @Override
    public T1 getFirst() {
        return first;
    }
 
    @Override
    public T2 getSecond() {
        return second;
    }
 
    @Override
    public void setFirst(T1 first) {
        this.first = first;
    }
 
    @Override
    public void setSecond(T2 second) {
        this.second = second;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public final class ImmutablePair<T1, T2> extends Pair<T1, T2> {
    private T1 first;
    private T2 second;
 
    public ImmutablePair(T1 first, T2 second) {
        this.first = first;
        this.second = second;
    }
 
    @Override
    public T1 getFirst() {
        return first;
    }
 
    @Override
    public T2 getSecond() {
        return second;
    }
 
    @Override
    public void setFirst(T1 first) {
        throw new UnsupportedOperationException();
    }
 
    @Override
    public void setSecond(T2 second) {
        throw new UnsupportedOperationException();
    }
}
Trio
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public abstract class Trio<T1, T2, T3> {
    public abstract T1 getFirst();
    public abstract T2 getSecond();
    public abstract T3 getThird();
    public abstract void setFirst(T1 first);
    public abstract void setSecond(T2 second);
    public abstract void setThird(T3 third);
 
    @Override
    public int hashCode() {
        final int hashes[] = getFieldHashes();
 
        int result = hashes[0];
        result = 31 * result + hashes[1];
        result = 31 * result + hashes[2];
        return result;
    }
 
    @Override
    public boolean equals(Object obj) {
        if (obj == null)
            return false;
 
        if (this == obj)
            return true;
 
        if (!(obj instanceof Trio))
            return false;
 
        Trio<?, ?, ?> other = (Trio<?, ?, ?>) obj;
 
        return new EqualityBuilder()
                .append(this.getFirst(), other.getFirst())
                .append(this.getSecond(), other.getSecond())
                .append(this.getThird(), other.getThird())
                .areEqual();
    }
 
    private int[] getFieldHashes() {
        int result[] = new int[3];
 
        final int firstHash = this.getFirst() == null ? 0 : this.getFirst().hashCode();
        final int secondHash = this.getSecond() == null ? 0 : this.getSecond().hashCode();
        final int thirdHash = this.getThird() == null ? 0 : this.getThird().hashCode();
 
        /*
            result[0] == max
            result[1] == mid
            result[2] == min
         */
        result[2] = Math.min(firstHash, Math.min(secondHash, thirdHash));
        result[0] = Math.max(firstHash, Math.max(secondHash, thirdHash));
        result[1] = Math.min(result[0], Math.min(firstHash, Math.max(secondHash, thirdHash)));
 
        return result;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public final class ImmutableTrio<T1, T2, T3> extends Trio<T1, T2, T3> {
    private T1 first;
    private T2 second;
    private T3 third;
 
    public ImmutableTrio(T1 first, T2 second, T3 third) {
        this.first = first;
        this.second = second;
        this.third = third;
    }
 
    @Override
    public T1 getFirst() {
        return first;
    }
 
    @Override
    public T2 getSecond() {
        return second;
    }
 
    @Override
    public T3 getThird() {
        return third;
    }
 
    @Override
    public void setFirst(T1 first) {
        throw new UnsupportedOperationException();
    }
 
    @Override
    public void setSecond(T2 second) {
        throw new UnsupportedOperationException();
    }
 
    @Override
    public void setThird(T3 third) {
        throw new UnsupportedOperationException();
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class MutableTrio<T1, T2, T3> extends Trio<T1, T2, T3> {
    private T1 first;
    private T2 second;
    private T3 third;
 
    public MutableTrio(T1 first, T2 second, T3 third) {
        this.first = first;
        this.second = second;
        this.third = third;
    }
 
    @Override
    public T1 getFirst() {
        return first;
    }
 
    @Override
    public T2 getSecond() {
        return second;
    }
 
    @Override
    public T3 getThird() {
        return third;
    }
 
    @Override
    public void setFirst(T1 first) {
        this.first = first;
    }
 
    @Override
    public void setSecond(T2 second) {
        this.second = second;
    }
 
    @Override
    public void setThird(T3 third) {
        this.third = third;
    }
}
Utility
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class EqualityBuilder {
    private HashSet<Object> left;
    private HashSet<Object> right;
 
    public EqualityBuilder() {
        left = new HashSet<>();
        right = new HashSet<>();
    }
 
    public EqualityBuilder append(final Object lhs, final Object rhs) {
        left.add(lhs);
        right.add(rhs);
        return this;
    }
 
    public boolean areEqual() {
        return left.equals(right);
    }
}
Размещено в Без категории
Просмотров 558 Комментарии 2
Всего комментариев 2
Комментарии
  1. Старый комментарий
    по-идее проверка
    if (obj == null)
    не нужна

    вместо нее, в первую очередь, можно проверять
    if (!(obj instanceof Pair)) return false;
    Запись от Pablito размещена 12.09.2018 в 16:44 Pablito на форуме
  2. Старый комментарий
    Аватар для HighPredator
    Только сейчас увидел комент. В принципе согласен, обычно оставляю ибо не руками писано
    Запись от HighPredator размещена 17.09.2018 в 10:06 HighPredator вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru