code: private void putInList(int[] address) {
          FilterCell currentCell = firstCell;
          FilterCell nextCell = null;
  
          for (int i = 0; i < address.length; i++) {
              if (address[i] != -1) {
                  nextCell = currentCell.findNextCell(address[i]);
              } else {
                  nextCell = currentCell.getWildcardCell();
              }
  
              if (nextCell == null) { // new address, complete the tree
                  for (int j = i; j < address.length; j++) {
                      currentCell = currentCell.addNewCell(address[j]);
                  }
                  return;
              }
  
              currentCell = nextCell;
          }
      }
docs: Add one address to the tree. The address is passed in as
  an (n-level) integer array. n is currently set at 8, since that
  is the number of numbers in an IPv6 address. The format of the array
  is that the rightmost number of the address goes into the n-1 position
  in the array, the next right most number into the n-2 position, and so on.
  Positions in the array which have not be set, are then set to 0.
  This means an IPv4 address of 1.2.3.4 should be
  put into the array as a[0] - a[7] as: 0, 0, 0, 0, 1, 2, 3, 4, in
  IPv6 format this would be 0:0:0:0:1:2:3:4
  
  @param address
  int array of the address to add. The format of this
  address is described above.