code: public WeightedItem<T> addOrVote(T item) {
          for (int i = 0; i < list.size(); i++) {
              WeightedItem<T> weightedItem = list.get(i);
              if (weightedItem.item.equals(item)) {
                  voteFor(weightedItem);
                  return weightedItem;
              }
          }
          return organizeAndAdd(item);
      }
docs: Adds a new item to the list or votes for the given item if it
  already exists. If the {@link #maxSize} is reached, half of the
  list is removed.
  
  When half of the list is removed, the weights of all the items
  are reset. The newly added item gets a vote if applicable.
  
  @param item
  @return The node that can be used to vote for