If the maxValue method is called very frequently I would suggest to build your logic in the setter ie define all fields as private/protected and then also define a variable maxValue. Your setter logic would look something like this.
setValue1(double value1){
if( getValue1() == maxValue() && value1 < maxValue()){
//.. Check each of value1 .. 20 for the max Value and Assign if
}else if(value1 > maxValue()){
maxValue = value1;
}
}
This would be more efficient even if you are using an array, as you need to scan the entire array/fields only when the value you are setting is less than the current max value and the maxValue is same as the current value (another optimization when using the array would be to store the index of the maxValue and then scan the entire array only when you are reducing the field value and it is the current maxValue field.