diff --git a/fastUtil/pom.xml b/fastUtil/pom.xml
new file mode 100644
index 0000000000..fcd9020747
--- /dev/null
+++ b/fastUtil/pom.xml
@@ -0,0 +1,44 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ fastUtil
+ 1.0-SNAPSHOT
+
+
+
+
+ it.unimi.dsi
+ fastutil
+ 8.2.2
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+ org.openjdk.jmh
+ jmh-core
+ 1.19
+ test
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ 1.19
+ test
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/fastUtil/src/test/java/com/baeldung/BigArraysUnitTest.java b/fastUtil/src/test/java/com/baeldung/BigArraysUnitTest.java
new file mode 100644
index 0000000000..a794d1a2f6
--- /dev/null
+++ b/fastUtil/src/test/java/com/baeldung/BigArraysUnitTest.java
@@ -0,0 +1,23 @@
+package com.baeldung;
+
+import it.unimi.dsi.fastutil.ints.IntBigArrays;
+import org.junit.Test;
+
+import static junit.framework.Assert.assertEquals;
+
+public class BigArraysUnitTest {
+
+ @Test
+ public void givenValidAray_whenWrapped_checkAccessFromIntBigArraysMethodsCorrect() {
+ int[] oneDArray = new int[] { 2, 1, 5, 2, 1, 7 };
+ int[][] twoDArray = IntBigArrays.wrap(oneDArray.clone());
+
+ int firstIndex = IntBigArrays.get(twoDArray, 0);
+ int lastIndex = IntBigArrays.get(twoDArray, IntBigArrays.length(twoDArray)-1);
+
+ assertEquals(2, firstIndex);
+ assertEquals(7, lastIndex);
+
+ }
+
+}
diff --git a/fastUtil/src/test/java/com/baeldung/FastUtilTypeSpecificBenchmarkUnitTest.java b/fastUtil/src/test/java/com/baeldung/FastUtilTypeSpecificBenchmarkUnitTest.java
new file mode 100644
index 0000000000..2c77989fe5
--- /dev/null
+++ b/fastUtil/src/test/java/com/baeldung/FastUtilTypeSpecificBenchmarkUnitTest.java
@@ -0,0 +1,58 @@
+package com.baeldung;
+
+import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
+import it.unimi.dsi.fastutil.ints.IntSet;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.infra.Blackhole;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MICROSECONDS)
+@State(Scope.Benchmark)
+public class FastUtilTypeSpecificBenchmarkUnitTest {
+
+ @Param({"100", "1000", "10000", "100000"})
+ public int setSize;
+
+ @Benchmark
+ public IntSet givenFastUtilsIntSetWithInitialSizeSet_whenPopulated_checkTimeTaken() {
+ IntSet intSet = new IntOpenHashSet(setSize);
+ for(int i = 0; i < setSize; i++){
+ intSet.add(i);
+ }
+ return intSet;
+ }
+
+
+ @Benchmark
+ public Set givenCollectionsHashSetWithInitialSizeSet_whenPopulated_checkTimeTaken() {
+ Set intSet = new HashSet(setSize);
+ for(int i = 0; i < setSize; i++){
+ intSet.add(i);
+ }
+ return intSet;
+ }
+
+ public static void main(String... args) throws RunnerException {
+ Options opts = new OptionsBuilder()
+ .include(".*")
+ .warmupIterations(1)
+ .measurementIterations(2)
+ .jvmArgs("-Xms2g", "-Xmx2g")
+ .shouldDoGC(true)
+ .forks(1)
+ .build();
+
+ new Runner(opts).run();
+ }
+
+
+
+
+}
diff --git a/fastUtil/src/test/java/com/baeldung/FastUtilTypeSpecificUnitTest.java b/fastUtil/src/test/java/com/baeldung/FastUtilTypeSpecificUnitTest.java
new file mode 100644
index 0000000000..61295cc6f1
--- /dev/null
+++ b/fastUtil/src/test/java/com/baeldung/FastUtilTypeSpecificUnitTest.java
@@ -0,0 +1,20 @@
+package com.baeldung;
+
+import it.unimi.dsi.fastutil.doubles.Double2DoubleMap;
+import it.unimi.dsi.fastutil.doubles.Double2DoubleOpenHashMap;
+import org.junit.Test;
+
+import static junit.framework.Assert.assertEquals;
+
+
+public class FastUtilTypeSpecificUnitTest {
+
+ @Test
+ public void givenValidDouble2DoubleMap_whenContentsQueried_checkCorrect(){
+ Double2DoubleMap d2dMap = new Double2DoubleOpenHashMap();
+ d2dMap.put(2.0, 5.5);
+ d2dMap.put(3.0, 6.6);
+ assertEquals(5.5, d2dMap.get(2.0));
+ }
+
+}