1 package net.bmahe.genetics4j.core;
2
3 import java.util.Arrays;
4 import java.util.Collection;
5
6 import org.apache.commons.lang3.Validate;
7
8 import net.bmahe.genetics4j.core.chromosomes.Chromosome;
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public class Genotype {
23
24 private final Chromosome[] chromosomes;
25
26
27
28
29
30
31
32 public Genotype(final Chromosome... _chromosomes) {
33 Validate.notNull(_chromosomes);
34 Validate.isTrue(_chromosomes.length > 0);
35
36 this.chromosomes = _chromosomes;
37 }
38
39
40
41
42
43
44
45 public Genotype(final Collection<Chromosome> _chromosomes) {
46 Validate.notNull(_chromosomes);
47 Validate.isTrue(_chromosomes.size() > 0);
48
49 final Chromosome[] chromosomesArray = _chromosomes.toArray(new Chromosome[_chromosomes.size()]);
50
51 this.chromosomes = chromosomesArray;
52 }
53
54
55
56
57
58
59 public int getSize() {
60 return chromosomes.length;
61 }
62
63
64
65
66
67
68 public Chromosome[] getChromosomes() {
69 return chromosomes;
70 }
71
72
73
74
75
76
77
78
79 public Chromosome getChromosome(final int index) {
80 Validate.isTrue(index >= 0);
81 Validate.isTrue(index < chromosomes.length);
82
83 return chromosomes[index];
84 }
85
86
87
88
89
90
91
92
93
94
95
96 public <T extends Chromosome> T getChromosome(final int index, Class<T> clazz) {
97 Validate.isTrue(index >= 0);
98 Validate.isTrue(index < chromosomes.length,
99 "Index (%d) larger than the number of chromosomes (%d)",
100 index,
101 chromosomes.length);
102 Validate.notNull(clazz);
103
104 return clazz.cast(chromosomes[index]);
105 }
106
107 @Override
108 public int hashCode() {
109 final int prime = 31;
110 int result = 1;
111 result = prime * result + Arrays.hashCode(chromosomes);
112 return result;
113 }
114
115 @Override
116 public boolean equals(Object obj) {
117 if (this == obj)
118 return true;
119 if (obj == null)
120 return false;
121 if (getClass() != obj.getClass())
122 return false;
123 Genotype other = (Genotype) obj;
124 if (!Arrays.equals(chromosomes, other.chromosomes))
125 return false;
126 return true;
127 }
128
129 @Override
130 public String toString() {
131 return "Genotype [chromosomes=" + Arrays.toString(chromosomes) + "]";
132 }
133 }