code: public static List<ByteBuffer> mergeMax(List<ByteBuffer> maxColumnNames, List<ByteBuffer> candidates, CellNameType comparator)
      {
          if (maxColumnNames.isEmpty())
              return minimalBuffersFor(candidates);
  
          if (candidates.isEmpty())
              return maxColumnNames;
  
          List<ByteBuffer> biggest = maxColumnNames.size() > candidates.size() ? maxColumnNames : candidates;
          List<ByteBuffer> smallest = maxColumnNames.size() > candidates.size() ? candidates : maxColumnNames;
  
          // We want to always copy the smallest list, and maybeGrow does it only if it's actually smaller
          List<ByteBuffer> retList = smallest.size() == biggest.size()
                                   ? new ArrayList<>(smallest)
                                   : maybeGrow(smallest, biggest.size());
  
          for (int i = 0; i < biggest.size(); i++)
              retList.set(i, minimalBufferFor(max(retList.get(i), biggest.get(i), comparator.subtype(i))));
  
          return retList;
      }
docs: Merge 2 lists of max cell name components.
  
  @param maxColumnNames lhs
  @param candidates rhs
  @param comparator comparator to use
  @return a list with biggest column names according to (sub)comparator