View Javadoc
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  }