public void testConcurrent(final boolean withoutRemove) {
		final UHTree map = UHTreeCreator.getNewUHTree(order);
		final Random random = new Random(0);
		final int keyRange = 500000; // Rango de los elementos a ingresar en el
									// UHTree.
		final RandomDistribution.Zipf zipf = new RandomDistribution.Zipf(
				random, 0, keyRange, 1.3);
		for(int i = 0; i < keyRange; i++) map.add(i, i);
		long t1 = System.nanoTime();
		for (int outer = 0; outer < outerPasses; ++outer) {
			ParUtil.parallel(numThreads, new Runnable() {

				public void run() {
					for (int inner = 0; inner < innerOps; ++inner) {
						final int pct = random.nextInt(100);
						final int key = zipf.nextInt();
						final int hash = getHash(key, order);
						if (pct < putPct) {
							map.add(hash, key);
						} else if (pct < searchPct || withoutRemove) {
							map.contains(hash, key);
						} else {
							map.remove(hash, key);
						}
					}

					//System.out.println("Finished pass.");
				}
			});
		}
		long t2 = System.nanoTime();
		System.out.println((t2 - t1) / (1000000000.0) + " segundos.");
		for (int i = 0; i < keyRange; i++)
			map.remove(getHash(i, order), i);
		assert map.isEmpty();
	}