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 public class Genotype { 11 12 private final Chromosome[] chromosomes; 13 14 public Genotype(final Chromosome... _chromosomes) { 15 Validate.notNull(_chromosomes); 16 Validate.isTrue(_chromosomes.length > 0); 17 18 this.chromosomes = _chromosomes; 19 } 20 21 public Genotype(final Collection<Chromosome> _chromosomes) { 22 Validate.notNull(_chromosomes); 23 Validate.isTrue(_chromosomes.size() > 0); 24 25 final Chromosome[] chromosomesArray = _chromosomes.toArray(new Chromosome[_chromosomes.size()]); 26 27 this.chromosomes = chromosomesArray; 28 } 29 30 public int getSize() { 31 return chromosomes.length; 32 } 33 34 public Chromosome[] getChromosomes() { 35 return chromosomes; 36 } 37 38 public Chromosome getChromosome(final int index) { 39 Validate.isTrue(index >= 0); 40 Validate.isTrue(index < chromosomes.length); 41 42 return chromosomes[index]; 43 } 44 45 public <T extends Chromosome> T getChromosome(final int index, Class<T> clazz) { 46 Validate.isTrue(index >= 0); 47 Validate.isTrue(index < chromosomes.length, 48 "Index (%d) larger than the number of chromosomes (%d)", 49 index, 50 chromosomes.length); 51 Validate.notNull(clazz); 52 53 return clazz.cast(chromosomes[index]); 54 } 55 56 @Override 57 public int hashCode() { 58 final int prime = 31; 59 int result = 1; 60 result = prime * result + Arrays.hashCode(chromosomes); 61 return result; 62 } 63 64 @Override 65 public boolean equals(Object obj) { 66 if (this == obj) 67 return true; 68 if (obj == null) 69 return false; 70 if (getClass() != obj.getClass()) 71 return false; 72 Genotype other = (Genotype) obj; 73 if (!Arrays.equals(chromosomes, other.chromosomes)) 74 return false; 75 return true; 76 } 77 78 @Override 79 public String toString() { 80 return "Genotype [chromosomes=" + Arrays.toString(chromosomes) + "]"; 81 } 82 }