diff --git a/java-collections-maps-3/README.md b/java-collections-maps-3/README.md
new file mode 100644
index 0000000000..ed68eb00a0
--- /dev/null
+++ b/java-collections-maps-3/README.md
@@ -0,0 +1,8 @@
+## Java Collections Cookbooks and Examples
+
+This module contains articles about Map data structures in Java.
+
+### Relevant Articles:
+
+- More articles: [[<-- prev>]](/../java-collections-maps)
+- More articles: [[<-- prev>]](/../java-collections-maps-2)
diff --git a/java-collections-maps-3/pom.xml b/java-collections-maps-3/pom.xml
new file mode 100644
index 0000000000..3888623a7f
--- /dev/null
+++ b/java-collections-maps-3/pom.xml
@@ -0,0 +1,43 @@
+
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../parent-java
+
+
+ 4.0.0
+ java-collections-maps-3
+ 0.1.0-SNAPSHOT
+ java-collections-maps-3
+ jar
+
+
+
+ org.springframework
+ spring-core
+ ${spring.version}
+ test
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+ org.apache.commons
+ commons-collections4
+ ${commons-collections4.version}
+
+
+
+
+ 4.1
+ 3.6.1
+ 5.2.5.RELEASE
+
+
diff --git a/java-collections-maps-3/src/test/java/com/baeldung/map/caseinsensitivekeys/CaseInsensitiveMapUnitTest.java b/java-collections-maps-3/src/test/java/com/baeldung/map/caseinsensitivekeys/CaseInsensitiveMapUnitTest.java
new file mode 100644
index 0000000000..833807c692
--- /dev/null
+++ b/java-collections-maps-3/src/test/java/com/baeldung/map/caseinsensitivekeys/CaseInsensitiveMapUnitTest.java
@@ -0,0 +1,94 @@
+package com.baeldung.map.caseinsensitivekeys;
+
+import org.apache.commons.collections4.map.CaseInsensitiveMap;
+import org.junit.Test;
+import org.springframework.util.LinkedCaseInsensitiveMap;
+import java.util.Map;
+import java.util.TreeMap;
+import static org.junit.Assert.*;
+
+public class CaseInsensitiveMapUnitTest {
+ @Test
+ public void givenCaseInsensitiveTreeMap_whenTwoEntriesAdded_thenSizeIsOne(){
+ Map treeMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ treeMap.put("abc", 1);
+ treeMap.put("ABC", 2);
+
+ assertEquals(1, treeMap.size());
+ }
+
+ @Test
+ public void givenCommonsCaseInsensitiveMap_whenTwoEntriesAdded_thenSizeIsOne(){
+ Map commonsHashMap = new CaseInsensitiveMap<>();
+ commonsHashMap.put("abc", 1);
+ commonsHashMap.put("ABC", 2);
+
+ assertEquals(1, commonsHashMap.size());
+ }
+
+ @Test
+ public void givenLinkedCaseInsensitiveMap_whenTwoEntriesAdded_thenSizeIsOne(){
+ Map linkedHashMap = new LinkedCaseInsensitiveMap<>();
+ linkedHashMap.put("abc", 1);
+ linkedHashMap.put("ABC", 2);
+
+ assertEquals(1, linkedHashMap.size());
+ }
+
+ @Test
+ public void givenCaseInsensitiveTreeMap_whenSameEntryAdded_thenValueUpdated(){
+ Map treeMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ treeMap.put("abc", 1);
+ treeMap.put("ABC", 2);
+
+ assertEquals(2, treeMap.get("aBc").intValue());
+ assertEquals(2, treeMap.get("ABc").intValue());
+ }
+
+ @Test
+ public void givenCommonsCaseInsensitiveMap_whenSameEntryAdded_thenValueUpdated(){
+ Map commonsHashMap = new CaseInsensitiveMap<>();
+ commonsHashMap.put("abc", 1);
+ commonsHashMap.put("ABC", 2);
+
+ assertEquals(2, commonsHashMap.get("aBc").intValue());
+ assertEquals(2, commonsHashMap.get("ABc").intValue());
+ }
+
+ @Test
+ public void givenLinkedCaseInsensitiveMap_whenSameEntryAdded_thenValueUpdated(){
+ Map linkedHashMap = new LinkedCaseInsensitiveMap<>();
+ linkedHashMap.put("abc", 1);
+ linkedHashMap.put("ABC", 2);
+
+ assertEquals(2, linkedHashMap.get("aBc").intValue());
+ assertEquals(2, linkedHashMap.get("ABc").intValue());
+ }
+
+ @Test
+ public void givenCaseInsensitiveTreeMap_whenEntryRemoved_thenSizeIsZero(){
+ Map treeMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ treeMap.put("abc", 3);
+ treeMap.remove("aBC");
+
+ assertEquals(0, treeMap.size());
+ }
+
+ @Test
+ public void givenCommonsCaseInsensitiveMap_whenEntryRemoved_thenSizeIsZero(){
+ Map commonsHashMap = new CaseInsensitiveMap<>();
+ commonsHashMap.put("abc", 3);
+ commonsHashMap.remove("aBC");
+
+ assertEquals(0, commonsHashMap.size());
+ }
+
+ @Test
+ public void givenLinkedCaseInsensitiveMap_whenEntryRemoved_thenSizeIsZero(){
+ Map linkedHashMap = new LinkedCaseInsensitiveMap<>();
+ linkedHashMap.put("abc", 3);
+ linkedHashMap.remove("aBC");
+
+ assertEquals(0, linkedHashMap.size());
+ }
+}
diff --git a/pom.xml b/pom.xml
index c210f18315..99d0943582 100644
--- a/pom.xml
+++ b/pom.xml
@@ -453,6 +453,7 @@
java-collections-conversions
java-collections-conversions-2
+ java-collections-maps-3
javafx
@@ -564,7 +565,7 @@
rxjava-libraries
rxjava-observables
rxjava-operators
-
+
atomikos
@@ -965,6 +966,7 @@
java-collections-conversions
java-collections-conversions-2
+ java-collections-maps-3
javafx
@@ -1075,7 +1077,7 @@
rxjava-libraries
rxjava-observables
rxjava-operators
-
+
atomikos