diff --git a/core-java-collections-set/README.md b/core-java-collections-set/README.md
new file mode 100644
index 0000000000..710484a2e1
--- /dev/null
+++ b/core-java-collections-set/README.md
@@ -0,0 +1,6 @@
+=========
+
+## Core Java Sets Cookbooks and Examples
+
+### Relevant Articles:
+- [Set Operations in Java](http://www.baeldung.com/set-operations-in-java)
diff --git a/core-java-collections-set/pom.xml b/core-java-collections-set/pom.xml
new file mode 100644
index 0000000000..d5f7937645
--- /dev/null
+++ b/core-java-collections-set/pom.xml
@@ -0,0 +1,33 @@
+
+ 4.0.0
+ core-java-collections-set
+ 0.1.0-SNAPSHOT
+ core-java-collections-set
+ jar
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../parent-java
+
+
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+ org.apache.commons
+ commons-collections4
+ ${commons-collections4.version}
+
+
+
+
+ 4.3
+ 27.1-jre
+
+
diff --git a/core-java-collections-set/src/test/java/com/baeldung/set/SetOperationsUnitTest.java b/core-java-collections-set/src/test/java/com/baeldung/set/SetOperationsUnitTest.java
new file mode 100644
index 0000000000..7c25585e49
--- /dev/null
+++ b/core-java-collections-set/src/test/java/com/baeldung/set/SetOperationsUnitTest.java
@@ -0,0 +1,93 @@
+package com.baeldung.set;
+
+import static org.junit.Assert.*;
+
+import org.apache.commons.collections4.SetUtils;
+import org.junit.Test;
+
+import com.google.common.collect.Sets;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class SetOperationsUnitTest {
+
+ private Set setA = setOf(1,2,3,4);
+ private Set setB = setOf(2,4,6,8);
+
+ private static Set setOf(Integer... values) {
+ return new HashSet(Arrays.asList(values));
+ }
+
+ @Test
+ public void givenTwoSets_WhenWeRetainAll_ThenWeIntersectThem() {
+ Set intersectSet = new HashSet<>(setA);
+ intersectSet.retainAll(setB);
+ assertEquals(setOf(2,4), intersectSet);
+ }
+
+ @Test
+ public void givenTwoSets_WhenWeAddAll_ThenWeUnionThem() {
+ Set unionSet = new HashSet<>(setA);
+ unionSet.addAll(setB);
+ assertEquals(setOf(1,2,3,4,6,8), unionSet);
+ }
+
+ @Test
+ public void givenTwoSets_WhenRemoveAll_ThenWeGetTheDifference() {
+ Set differenceSet = new HashSet<>(setA);
+ differenceSet.removeAll(setB);
+ assertEquals(setOf(1,3), differenceSet);
+ }
+
+ @Test
+ public void givenTwoStreams_WhenWeFilterThem_ThenWeCanGetTheIntersect() {
+ Set intersectSet = setA.stream()
+ .filter(setB::contains)
+ .collect(Collectors.toSet());
+ assertEquals(setOf(2,4), intersectSet);
+ }
+
+ @Test
+ public void givenTwoStreams_WhenWeConcatThem_ThenWeGetTheUnion() {
+ Set unionSet = Stream.concat(setA.stream(), setB.stream())
+ .collect(Collectors.toSet());
+ assertEquals(setOf(1,2,3,4,6,8), unionSet);
+ }
+
+ @Test
+ public void givenTwoStreams_WhenWeFilterThem_ThenWeCanGetTheDifference() {
+ Set differenceSet = setA.stream()
+ .filter(val -> !setB.contains(val))
+ .collect(Collectors.toSet());
+ assertEquals(setOf(1,3), differenceSet);
+ }
+
+ @Test
+ public void givenTwoSets_WhenWeUseApacheCommonsIntersect_ThenWeGetTheIntersect() {
+ Set intersectSet = SetUtils.intersection(setA, setB);
+ assertEquals(setOf(2,4), intersectSet);
+ }
+
+ @Test
+ public void givenTwoSets_WhenWeUseApacheCommonsUnion_ThenWeGetTheUnion() {
+ Set unionSet = SetUtils.union(setA, setB);
+ assertEquals(setOf(1,2,3,4,6,8), unionSet);
+ }
+
+
+ @Test
+ public void givenTwoSets_WhenWeUseGuavaIntersect_ThenWeGetTheIntersect() {
+ Set intersectSet = Sets.intersection(setA, setB);
+ assertEquals(setOf(2,4), intersectSet);
+ }
+
+ @Test
+ public void givenTwoSets_WhenWeUseGuavaUnion_ThenWeGetTheUnion() {
+ Set unionSet = Sets.union(setA, setB);
+ assertEquals(setOf(1,2,3,4,6,8), unionSet);
+ }
+}
diff --git a/pom.xml b/pom.xml
index 0de4a36336..901bc94f96 100644
--- a/pom.xml
+++ b/pom.xml
@@ -389,6 +389,7 @@
core-java-collections
core-java-collections-map
core-java-collections-list
+ core-java-collections-set
core-java-concurrency-basic
core-java-concurrency-collections
core-java-io
@@ -1059,6 +1060,7 @@
core-java-collections
core-java-collections-map
core-java-collections-list
+ core-java-collections-set
core-java-concurrency-basic
core-java-concurrency-collections
core-java-io