List<? extends Marker> getDisplayedMarkers() {
   int count = markers.size();
   if (count == 0) {
     return null;
   } else if (count < strategy.getMinMarkersCount()) {
     return markers;
   } else {
     return Collections.singletonList(this);
   }
 }
 void refresh() {
   int count = markers.size();
   if (count == 0) {
     removeVirtual();
   } else if (count < strategy.getMinMarkersCount()) {
     removeVirtual();
     for (DelegatingMarker m : markers) {
       m.changeVisible(true);
     }
   } else {
     for (DelegatingMarker m : markers) {
       m.changeVisible(false);
     }
     LatLng position = calculateClusterPosition();
     if (virtual == null || lastCount != count) {
       removeVirtual();
       lastCount = count;
       virtual = strategy.createMarker(new ArrayList<Marker>(markers), position);
     } else {
       virtual.setPosition(position);
     }
   }
 }