@Override public synchronized void removeAttribute(int index){
  Attribute a=attributes.get(index);
  if (a == null) {
    return;
  }
  attributes.set(index,null);
  unusedColumnList.add(index);
}

@ Override public synchronized void removeAttribute ( int index ) { Attribute a = attributes . get ( index ) ; if ( a == null ) { return ; } attributes . set ( index , null ) ; unusedColumnList . add ( index ) ; }
sets the attribute with the given index to null . afterwards , this column can be reused . callers must make sure , that no other example set contains a reference to this column . otherwise its data will be messed up . usually this is only possible if an operator generates intermediate attributes , like a validation chain or a feature generator . if the attribute already was removed , this method returns silently .
