0% found this document useful (0 votes)
12 views114 pages

Java DSA & Logic Interview Questions - Complete Solutions

The document provides a comprehensive guide on solving common coding interview questions related to Java data structures and algorithms. It covers various problems such as finding the kth largest element in an array, reversing an integer array, identifying the first non-repeating character in a string, and counting element frequencies using different approaches. Each problem includes multiple solutions with time and space complexity analysis, showcasing both brute force and optimal methods.

Uploaded by

arsacskasha
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views114 pages

Java DSA & Logic Interview Questions - Complete Solutions

The document provides a comprehensive guide on solving common coding interview questions related to Java data structures and algorithms. It covers various problems such as finding the kth largest element in an array, reversing an integer array, identifying the first non-repeating character in a string, and counting element frequencies using different approaches. Each problem includes multiple solutions with time and space complexity analysis, showcasing both brute force and optimal methods.

Uploaded by

arsacskasha
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

Java DSA & Logic Coding Interview Questions - Complete

Solutions
Core Array & String Problems
1. Find the kth largest/smallest element in an array
Question: Given an array of integers, find the kth largest element.

Approach 1 - Sorting (Brute Force):

java

pp uu bb ll ii cc ii nn tt
findKthLargest((iinntt[[]]
nnuummss,, ii nn tt kk )) {{
AA rrrraa yyss.. sort((nnuumm ss));;
rreettuurrnn nnuummss[[nnuummss..lleennggtthh - kk]];;
}}
// Time: O(n log n), Space: O(1)
Approach 2 - Min Heap (Optimal):

java

pp uu bb ll ii cc ii nn tt findKthLargest((iinntt[[]] nnuummss,,
ii nn tt kk )) {{ PPrriioorriittyyQQuueeuuee<<Integer>
mmiinnHHeeaapp = nneeww
PPrriioorriittyyQQuueeuuee<<>>(());; ff oo rr (( ii nn tt
nnuumm : nnuummss)) {{
mmiinnHHeeaapp..offer((nnuumm));;
iiff ((minHeap.size(()) > kk )) {{
mm iinnHHeeaa pp.. poll(());;
}}
}}
rreettuurrnn mm iinnHHeeaa pp.. peek(());;
}}
// Time: O(n log k), Space: O(k)

Approach 3 - QuickSelect (Most Optimal):

jav
a
pp uu bb ll ii cc ii nn tt findK
findKthLargest(
thLargest (iinntt[[]] nnuummss,, ii nn tt kk )) {{
rr ee tt uu rr nn quickSelect(nums
quickSelect(nums,, 00 ,, nn uu mm ss.length
.length - 1,, nnuummss..lleennggtthh - kk )) ;;
}}

pp rr ii vv aa tt ee ii nn tt quickSelect(
quickSelect(iinntt[[]]
nnuummss,, int left, ii nn tt rr ii gg hh tt ,, ii nn tt kk ))
{{ iiff ((left
left == rriigghhtt)) rr ee tt uu rr nn
nn uu mm ss [[ ll ee ff tt ]] ;;

iinntt pp ii vv oo tt II nn dd ee xx =
partition(
partition (nnuummss,, lleefftt,,
rriigghhtt));; iiff ((k k ==
ppiivvoottIInnddeexx)) rreettuurrnn
nn uu mm ss [[ kk ]] ;;
ee ll ss ee iiff (k < pp ii vv oo tt II nn dd ee xx )) return quickSelect(nums,
quickSelect(nums,
lleefftt,, pp ii vv oo tt II nn dd ee xx - 11 ,, kk));; ee ll ss ee
rr ee tt uu rr nn quickSelect(
quickSelect(nnuummss,, pp ii vv oo tt II nn dd ee xx +
11,, rriigghhtt,, kk));;
}}

pp rr ii vv aa tt ee iinntt partition(
partition(iinntt[[]]
nnuummss,, iinntt lleefftt,, iinntt
rriigghhtt)) {{ iinntt pp ii vv oo tt =
nnuumm ss[[rriigghhtt]];;
iinntt ii = lleefftt;;
ff oo rr ((int
int j = lleefftt;; jj <
rr ii gg hh tt ;; jj++
++)) {{ iiff
(( nn uu mm ss [[ jj ]] <=
pp ii vv oo tt )) {{
swap(
swap (nnuum
mss,, ii,, jj));;
ii++
++;;
}}
}}
swap(
swap (nnuummss,
, ii,, rriigghhtt));;
rr ee tt uu rr nn ii;;
}}

pp rr ii vv aa tt ee vv oo ii dd
swap(
swap(iinntt[[]] nnuummss,, iinntt
ii,, iinntt jj)) {{ iinntt tteemmpp
= nn uu mm ss [[ ii ]] ;;
nnuummss[[ii]]
=
nnuummss[[jj]];
;
nn uu mm ss [[ jj ]
] = tteemmpp;;
}}
// Time: O(n) average, O(n²) worst, Space: O(1)
2. Reverse an integer array in-place (O(n) solution)
Question: Reverse an array without using extra space.

Approach 1 - Using Extra Array (Brute Force):

jav
a
pp uu bb ll ii cc iinntt[]
reverseArray((iinntt[[]]
aa rr rr )) {{ iinntt[[] result =
nneeww
iinntt[[aa rrrr.. lleennggtthh]]
;; ff oo rr ((int i = 00 ;; ii <
aarrrr..length;; ii++)) {{
rreessuulltt[[i] = aarrrr[[aarrrr..lleennggtthh - 11 - ii]];;
}}
rreettuurrnn rr ee ss uu ll tt ;;
Approach 2 - Two Pointer In-Place (Optimal):

java

pp uu bb ll ii cc vv oo ii dd
reverseArray((iinntt[[]] aarrrr))
{{ iinntt lleefftt = 0,,
rriigghhtt =
aarrrr..lleennggtthh - 11;;
ww hh ii ll ee ((lleefftt <
rriigghhtt)) {{
iinntt tteemmpp = aarrrr[[lleefftt]];;
aarrrr[[lleefftt]] =
aarrrr[[rriigghhtt]];;
aa rr rr [[ rr ii gg hh tt ]]
= tteemmpp;;
ll ee ff tt ++;;

3. Find first non-repeating character in a string using HashMap


Question: Find the first character that appears only once in a string.

Approach 1 - Nested Loop (Brute Force):

jav
a
pp uu bb ll ii cc cc hh aa rr
firstNonRepeating((SSttrriinngg ss))
{{ ff oo rr ((int i = 00 ;; ii <
s.length(());; ii++)) {{
bboooolleeaann uunniiqquuee = tt rr uu ee ;;
ff oo rr ((int j = 00 ;; jj < s.length(());; jj++)) {{
iiff ((i != jj && ss.charAt(i) ==
ss..charAt((jj)))) {{ uunniiqquuee =
ff aa ll ss ee ;;
bb rr ee aa kk ;;
}}
}}
iiff ((unique) rr ee tt uu rr nn ss..charAt((ii));;
}}
rreettuurrnn '' '';;
}}
// Time: O(n²), Space: O(1)
Approach 2 - HashMap (Optimal):

java

pp uu bb ll ii cc cc hh aa rr firstNonRepeating((SSttrriinngg ss)) {{
MMaapp<<Character, IInntteeggeerr>> ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());;

// Count frequencies
ff oo rr ((char c : ss..toCharArray(()))) {{
ffrreeqqMMaapp..put(cc,, ffrreeqqMMaapp..getOrDefault((c, 00 )) + 11));;
}}

// Find first non-repeating


ff oo rr ((char c : ss..toCharArray(()))) {{
iiff ((freqMap.get((cc)) ==
11 )) {{ rr ee tt uu rr nn
c c ;;
}}
}}
rreettuurrnn '' '';;
}}
// Time: O(n), Space: O(k) where k is unique characters

4. Print duplicate elements in array/list using Stream API & via HashMap
Question: Find and print all duplicate elements in an array.

Approach 1 - HashMap (Normal Method):

jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findDuplicates((iinntt[[]] aa rr rr )) {{
MMaapp<<Integer, IInntteeggeerr>>
ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());; LLiisstt<<Integer>
dd uu pp ll ii cc aa tt ee ss = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;

ffoorr ((iinntt nnuumm : aarrrr)) {{


ff rr ee qq MM aa pp .. put(nn uu mm ,, ffrreeqqMMaapp..getOrDefault((num, 00 )) + 11));;
}}

ffoorr ((Map.EEnnttrryy<<IInntteeggeerr,,
IInntteeggeerr> entry :
ffrreeqqMMaapp..entrySet(()))) {{ iiff
((entry.getValue(()) > 11 )) {{
dduupplliiccaatteess..add(eennttrryy..getKey(())));;
}}
}}
Approach 2 - Stream API (Optimal/Modern):

java

pp uu bb ll ii cc LLiisstt<Integer>>
findDuplicatesStream((iinntt[[]] aa rr rr )) {{
rr ee tt uu rr nn AArrrraayyss..stream((aarrrr))
..boxed(())
..collect(Collectors..groupingBy((FFuunnccttiioonn.identity(),,
CCoolllleeccttoorrss..counting(())))))
..entrySet(())..stream(())
..filter(entry -> ee nn tt rr yy .. getValue(( )) > 11 ))
..map((MMaapp..EEnnttrryy::getKey))
..collect((CCoolllleeccttoorrss..toList(())));;
}}
// Time: O(n), Space: O(n)

Approach 3 - Using Set:

jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findDuplicatesSet((iinntt[[]] aa rr rr )) {{
SS ee tt << I n t e g e r > sseeeenn = nneeww
HHaasshhSSeett<<>>(());;
SSeett<<Integer> dd uu pp ll ii cc aa tt ee ss =
nneeww HHaasshhSSeett<<>>(());;

ffoorr ((iinntt nnuumm : aarrrr)) {{


iiff (( !
seen.. add(( nn uu
m m )) )) { {
dduupplliiccaatte
ess..add((nnuum
m )); ;

5. Separate non-zero and zero elements in array


Question: Move all zeros to the end while maintaining order of non-zero elements.

Approach 1 - Extra Array (Brute Force):

java

pp uu bb ll ii cc iinntt[]
separateZeros((iinntt[[]]
aa rr rr )) {{ iinntt[[] result =
nneeww
ii nn tt [[ aa rr rr .. ll ee nn gg tt hh ]]
;; ii nn tt iinnddeexx = 00 ;;

// First add non-zeros


ffoorr ((iinntt
nnuum m :
aarrrr)) {{ iiff
((nnuumm !=
0 0 )) { {
rreessuulltt[[iinnddeexx++]] = nnuumm;;
}}
}}
// Zeros are already at the end (default value)
Approach 2 - Two Pointer In-Place (Optimal):

jav
a
pp uu bb ll ii cc vv oo ii dd
separateZeros((iinntt[[]]
aarrrr)) {{ ii nn tt
ii nn ss ee rr tt PP oo ss = 00 ;;

// Move all non-zero elements to front


ff oo rr ((int i = 00 ;; ii <
aarrrr..length;; ii++)) {{ iiff
(( aa rr rr [[ ii ]] != 00 )) {{
aarrrr[[insertPos++]] = aa rr rr [[ ii ]] ;;
}}
}}

// Fill remaining with zeros


wwhhiillee ((iinnsseerrttPPooss <
aarrrr..lleennggtthh)) {{
aa rr rr [[ ii nn ss ee rr tt PPoo ss ++]]
= 00 ;;
}}
Approach 3 - Single Pass Swap:

java

pp uu bb ll ii cc vv oo ii dd
separateZerosSwap((iinntt[[]]
aa rr rr )) {{ ii nn tt jj = 00 ;;
ff oo rr ((int i = 00 ;; ii <
aarrrr..length;; ii++)) {{
iiff (( aa rr rr [[ ii ]] != 00 )) {{
iinntt tteemmpp
= aarrrr[[ii]];;
aa rr rr [[ ii ]] =
aa rrrr[[jj]];;
aa rr rr [[ jj ]] =
tteemmpp;; jj+
+;;
}}
}}

6. Count frequency of elements in array (including exactly 'k' times)


Question: Count frequency of each element and find elements appearing exactly k times.

Approach 1 - Nested Loop (Brute Force):

jav
a
pp uu bb ll ii cc MMaapp<Integer,,
IInntteeggeerr>> countFrequency((iinntt[[]]
aa rr rr )) {{ MMaapp<<Integer,
IInntteeggeerr>> ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());; ff oo rr ((int i =
00 ;; ii < aarrrr..length;; ii++)) {{
iinntt ccoouunntt = 00;;
ff oo rr ((int j = 00 ;; jj <
aarrrr..length;; jj++)) {{
iiff ((arr[ii]] ==
aa rr rr [[ jj ]] )) {{
cc oo uu nn tt + + ;;
}}
}}
ffrreeqqMMaapp..put(aarrrr[[ii]],, cc oo uu nn tt )) ;;
}}
rreettuurrnn ffrreeqqMMaapp;;
Approach 2 - HashMap (Optimal):

java

pp uu bb ll ii cc MMaapp<Integer,,
IInntteeggeerr>> countFrequency((iinntt[[]]
aa rr rr )) {{ MMaapp<<Integer,
IInntteeggeerr>> ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());; ff oo rr (( ii nn tt
nnuumm : aa rr rr )) {{
ff rr ee qq MM aa pp .. put(nn uu mm ,, ffrreeqqMMaapp..getOrDefault((num, 00 )) + 11));;
}}
rreettuurrnn ffrreeqqMMaapp;;
}}

pp uu bb ll ii cc LLiisstt<Integer>>
findElementsWithFrequencyK((iinntt[[]] aa rr rr ,, ii nn tt kk ))
{{ MM aa pp << Integer, IInntteeggeerr>>
ffrreeqqMMaapp = countFrequency((aarrrr));;
rreettuurrnn ffrreeqqMMaapp..entrySet(())..stream(())
..filter(entry -> ee nn tt rr yy .. getValue(( )) == kk ))
..map((MMaapp..EEnnttrryy::getKey))
..collect((CCoolllleeccttoorrss..toList(())));;

7.Find all repeating elements in a list (frequency >= 2)


Question: Find all elements that appear at least twice.

Approach 1 - HashMap (Normal Method):

jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findRepeating((LLiisstt<<IInntteeggeerr>> lliisstt))
{{ MMaapp<<Integer, IInntteeggeerr>>
ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());; LLiisstt<<Integer>
rr ee pp ee aa tt ii nn gg = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;

ff oo rr ((iinntt nnuumm : lliisstt)) {{


ff rr ee qq MM aa pp .. put(nn uu mm ,, ffrreeqqMMaapp..getOrDefault((num, 00 )) + 11));;
}}

ffoorr ((Map.EEnnttrryy<<IInntteeggeerr,,
IInntteeggeerr> entry :
ffrreeqqMMaapp..entrySet(()))) {{ iiff
((entry.getValue(()) >= 22 )) {{
rreeppeeaattiinngg..add(eennttrryy..getKey(())));;
}}
}}
Approach 2 - Stream API (Optimal):

java

pp uu bb ll ii cc LLiisstt<Integer>>
findRepeatingStream((LLiisstt<<IInntteeggeerr>>
lliisstt)) {{ rr ee tt uu rr nn lliisstt..stream(())
..collect(Collectors..groupingBy((FFuunnccttiioonn.identity(),,
CCoolllleeccttoorrss..counting(())))))
..entrySet(())..stream(())
..filter(entry -> ee nn tt rr yy .. getValue(( )) >= 22 ))
..map((MMaapp..EEnnttrryy::getKey))
..collect((CCoolllleeccttoorrss..toList(())));;
}}
// Time: O(n), Space: O(n)

8. Longest increasing subsequence (DP/optimized O(n log n))


Question: Find the length of the longest increasing subsequence.

Approach 1 - Recursion (Brute Force):

jav
a
pp uu bb ll ii cc ii nn tt lengthOfLIS((iinntt[[]] nnuummss)) {{
rr ee tt uu rr nn lisRecursive(nnuummss,, 00 ,, IInntteeggeerr..MMIINN VVAALLUUEE));;
}}

pp rr ii vv aa tt ee iinntt lisRecursive((iinntt[[]]
nnuummss,, iinntt index,, iinntt pp rr ee vv ))
{{ iiff ((index == nnuummss..lleennggtthh))
rr ee tt uu rr nn 00 ;;

// Exclude current
ii nn tt eexxcclluuddee = lisRecursive((nnuummss,, iinnddeexx + 11 ,, pp rr ee vv )) ;;

// Include current if valid


iinntt iinncclluuddee = 00;;
iiff ((nnuummss[[iinnddeexx]] > pp rr ee vv )) {{
ii nn cc ll uu dd ee = 1 + lisRecursive((nnuummss,, index + 1,, nn uu mm ss [[ ii nn dd ee xx ]] )) ;;
}}

rreettuurrnn MMaatthh..max((iinncclluuddee,, eexxcclluuddee));;


}}
// Time: O(2^n), Space: O(n)

Approach 2 - Dynamic Programming (Normal Method):

java

pp uu bb ll ii cc ii nn tt
lengthOfLIS((iinntt[[]]
nnuummss)) {{ iiff
((nums.lleennggtthh ==
00 )) rr ee tt uu rr nn 00 ;;

iinntt[[] dp = nneeww
iinntt[[nnuummss..lleennggtthh]];;
AArrrraayyss..fill((ddpp,, 11));;
iinntt mmaaxxLLeenn = 11;;

ff oo rr ((int i = 11 ;; ii <
nnuummss..length;; ii++)) {{
ff oo rr ((int j = 00 ;; jj < ii;; jj+
+)) {{
iiff ((nums[ii]] > nn uu mm ss [[ jj ]] )) {{
ddpp[[i] = MMaatthh.max(dp[i]],, dd pp [[ jj ]] + 11));;
}}
}}
mmaaxxLLeenn = Math.max((mmaaxxLLeenn,, ddpp[[ii]]));;
}}

Approach 3 - Binary Search + DP (Optimal):

jav
a
pp uu bb ll ii cc ii nn tt
lengthOfLIS((iinntt[[]] nnuummss))
{{ LLiisstt<<Integer> ttaaiillss =
nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;

ffoorr ((iinntt nnuumm : nnuummss)) {{


ii nn tt ppooss =
Collections..binarySearch((ttaaiillss,,
nnuumm));; iiff ((ppooss < 00 )) {{
ppooss = -((ppooss + 11 )) ;;
}}
iiff ((pos ==
ttaaiillss..size(())
)) { {
tt aa ii ll ss .. add(( n
n uu m m ) ) ; ;
}} eellssee {{
ttaaiillss..set((ppooss,, nnuumm));;
}}

9. Find anagrams in string list (using sorting or frequency map)


Question: Group anagrams together from a list of strings.

Approach 1 - Sorting (Normal Method):

java

pp uu bb ll ii cc LLiisstt<List<<SSttrriinngg>>>>
groupAnagrams(Sttrriinngg[[]] ssttrrss)) {{
MMaa pp<<String,, LLiisstt<<SString>> map =
nneeww HHaasshhMMaapp<<>>(());;

ffoorr ((SSttrriinngg ssttrr : ssttrrss)) {{


cc hh aa rr [[ ] chars =
ssttrr..toCharArray(());;
AArrrraayyss..sort((cchhaarrss))
;;
SStt rr ii nn gg key = nneeww SSttrriinngg((cchhaarrss));;

mmaapp..putIfAbsent(kkeeyy,,
nneeww
AA rrrraa yyLLiisstt<<>>(())));;
mmaapp..get(kkeeyy))..add((ssttrr
)) ; ;
}}
Approach 2 - Frequency Map (Optimal):

jav
a
pp uu bb ll ii cc LLiisstt<List<<SSttrriinngg>>>>
groupAnagrams(Sttrriinngg[[]] ssttrrss)) {{
MMaa pp<<String,, LLiisstt<<SString>> map =
nneeww HHaasshhMMaapp<<>>(());;

ffoorr ((SSttrriinngg ssttrr : ssttrrss)) {{


ii nn tt [[ ] count = nneeww ii nn tt [[ 22 66 ]] ;;
ff oo rr ((char c : ssttrr..toCharArray(()))) {{
ccoouunntt[[cc - ''aa'']]++;;
}}

SS tt rr ii nn gg key =
AArrrraayyss..toString((ccoouunntt
));; mmaapp..putIfAbsent(kkeeyy,,
nneeww
AA rrrraa yyLLiisstt<<>>(())));;
mm aa pp .. get(kk ee yy )) .. add(( ss tt r
r )) ; ;
}}

10. String palindrome check using two-pointer


Question: Check if a string is a palindrome.

Approach 1 - Reverse and Compare (Normal Method):

java

pp uu bb ll ii cc bboooolleeaann isPalindrome((SSttrriinngg ss)) {{


SS tt rr ii nn gg reversed = nneeww
SSttrriinnggBBuuiillddeerr((s).reverse(())..toString(());;
rr ee tt uu rr nn ss..equals((rreevveerrsseedd));;
}}
// Time: O(n), Space: O(n)

Approach 2 - Two Pointer (Optimal):

jav
a
pp uu bb ll ii cc bboooolleeaann
isPalindrome((SSttrriinngg ss)) {{
ii nn tt ll ee ff tt = 0,, rr ii gg hh tt =
ss..length(()) - 11 ;;

ww hhiillee ((lleefftt < rriigghhtt)) {{


iiff ((s.charAt((lleefftt)) !=
ss..charAt((rriigghhtt)))) {{
rr ee tt uu rr nn ff aa ll ss ee ;;
}}
lleefft
t++;;
rriigg
hhtt--
;;
}}
Approach 3 - Two Pointer with Alphanumeric Check:

java

pp uu bb ll ii cc bboooolleeaann
isPalindrome((SSttrriinngg ss)) {{
ii nn tt ll ee ff tt = 0,, rr ii gg hh tt =
ss..length(()) - 11 ;;

ww hhiillee ((lleefftt < rriigghhtt)) {{


ww hh ii ll ee ((left < rr ii gg hh tt && !
CChhaarraacctteerr.isLetterOrDigit(s..charAt((lleefftt))
)))) {{ ll ee ff tt ++;;
}}
ww hh ii ll ee ((left < rr ii gg hh tt && !
CChhaarraacctteerr.isLetterOrDigit(s..charAt((rriigghhtt
)))))) {{ rr ii gg hh tt --;;
}}

iiff
((Character.toLowerCase((ss..charA
t((lleefftt)))) !=
CChhaarraacctteerr..toLowerCase(
ss..charAt((rriigghhtt)))))) {{
rr ee tt uu rr nn ffaallssee;;
}}
lleefft
t++;;
rriigg

11. Remove duplicates from array/list using Set/Stream


Question: Remove duplicate elements from an array.

Approach 1 - Nested Loop (Brute Force):


java

pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicates((iinntt[[]] aa rr rr )) {{
LLiisstt<<Integer> rr ee ss uu ll tt = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;
ff oo rr ((int i = 00 ;; ii <
aarrrr..length;; ii++)) {{
bboooolleeaann
ii ss DD uu pp ll ii cc aa tt ee =
ffaallssee;;
ff oo rr ((int j = 00 ;; jj < result.size(());; jj++)) {{
iiff ((arr[ii]] ==
rreessuulltt..get((jj))))
{{ ii ss DD uu pp ll ii cc aa
tt ee = tt rr uu ee ;;
bb rr ee aa kk ;;
}}
}}
iiff (( !
ii ss DD uu pp ll ii cc aa tt ee ))
{{ rreessuulltt..add((aar
Approach 2 - Using Set (Normal Method):

java

pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicates((iinntt[[]] aa rr rr )) {{
SSeett<<Integer> ss ee tt = nneeww
LLiinnkkeeddHHaasshhSSeett<<>>(());;
ff oo rr (( ii nn tt nnuumm : aa rr rr )) {{
ss ee tt .. add(( nn uu mm )) ;;
}}
rreettuurrnn nneeww AArrrraayyLLiisstt<<>>((sseett));;
}}
// Time: O(n), Space: O(n)

Approach 3 - Stream API (Optimal):

java

pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicates((iinntt[[]] aa rr rr )) {{
rr ee tt uu rr nn
AArrrraayyss..stream((aarrrr))
..distinct(())
..boxed(())
..collect((CCoolllleeccttoorrss..toList(())));;
}}
// Time: O(n), Space: O(n)
12. Print Armstrong numbers in a range
Question: Find all Armstrong numbers (narcissistic numbers) in a given range.

Approach 1 - Direct Calculation (Normal Method):

java

pp uu bb ll ii cc LLiisstt<Integer>>
findArmstrongNumbers((iinntt ss tt aa rr tt ,, ii nn tt eenndd))
{{ LLiisstt<<Integer> rreessuulltt = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;

ff oo rr ((int num = ssttaarrtt;; nnuumm


<= ee nn dd ;; nn uu mm ++)) {{ iiff
((isArmstrong((nnuumm)))) {{
rreessuulltt..add((nnuumm));;
}}
}}
rreettuurrnn rr ee ss uu ll tt ;;
}}

pp rr ii vv aa tt ee bboooolleeaann
isArmstrong((iinntt nnuumm)) {{
ii nn tt oo rr ii gg ii nn aa ll =
nnuum m ; ;
iinntt ssuumm = 00;;
iinntt ddiiggiittss = Sttrriinngg..valueOf((nnuumm))..length(());;

wwhhiillee ((nnuumm > 00)) {{


iinntt ddiiggiitt = nnuumm % 11 00 ;;
ssuumm +=
Math.pow((ddiiggiitt,,
dd ii gg ii tt ss )) ;; nnuumm /=
11 00 ;;
}}
Approach 2 - Optimized with String (Optimal):

jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findArmstrongNumbers((iinntt ss tt aa rr tt ,, ii nn tt eenndd))
{{ LLiisstt<<Integer> rr ee ss uu ll tt = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;

ff oo rr ((int num = ssttaarrtt;; nnuumm <=


ee nn dd ;; nn uu mm ++)) {{
SS tt rr ii nn gg numStr =
SStt rr ii nn gg .. valueOf(( nn uu mm )) ;;
iinntt ddiiggiittss =
nnuummSSttrr..length(());;
ii nn tt ssuumm = 00 ;;

ff oo rr ((char c :
nnuummSSttrr..toCharArray(()
))) {{ ii nn tt dd ii gg ii tt = cc -
'' 00 '' ;;
ssuumm += Math.pow((ddiiggiitt,, dd ii gg ii tt ss )) ;;
}}

iiff ((ssuumm
==
nnuum m ) ) { {

13. Print second/third/fourth largest number in array


Question: Find the nth largest element in an array.

Approach 1 - Sorting (Brute Force):

java

pp uu bb ll ii cc iinntt nthLargest(iinntt[[]]
aarrrr,, iinntt nn )) {{
AArrrraayyss..sort((aarrrr));;
rreettuurrnn aarrrr[[aarrrr..lleennggtthh - nn]];;
}}
// Time: O(n log n), Space: O(1)

Approach 2 - Min Heap (Normal Method):

jav
a
pp uu bb ll ii cc iinntt nthLargest(iinntt[[]] aarrrr,, iinntt nn )) {{
PPrriioorriittyyQQuueeuuee<<Integer> mmiinnHHeeaapp = nneeww
PP rr ii oo rr ii tt yy QQ uu ee uu ee << >> (( )) ;;

ff oo rr (( ii nn tt nnuumm : aa rr rr ))
{{ mmiinnHHeeaapp..offer((nnu
um m ) ) ; ;
iiff ((minHeap.size(()) > nn )) {{
mm ii nn HH ee aa pp .. poll(( )) ;;
}}
}}
rreettuurrnn mm ii nn HH ee aa pp .. peek(( )) ;;
}}
// Time: O(k log n), Space: O(n)

Approach 3 - Stream API (Optimal for clarity):

java

pp uu bb ll ii cc iinntt
nthLargest(iinntt[[]] aarrrr,,
iinntt nn )) {{ rr ee tt uu rr nn
AArrrraayyss..stream((aarrrr)
)
..boxed(())
..sorted((CCoommppaarraattoorr..reverseOrder(())))
..skip((nn - 11 ))
..findFirst(())
..orElseThrow(());;
}}

// Or without duplicates:
pp uu bb ll ii cc ii nn tt
nthLargestDistinct(iinntt[[]] aarrrr,, ii nn tt
nn )) {{ rr ee tt uu rr nn
AArrrraayyss..stream((aarrrr))
..boxed(())
..distinct(())
..sorted((CCoommppaarraattoorr..reverseOrder(())))
..skip((nn - 11 ))
..findFirst(())
..orElseThrow(());;
}}

14. Find prime numbers from 1 to N


Question: Generate all prime numbers up to N.

Approach 1 - Simple Loop (Brute Force):

jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findPrimes((iinntt nn )) {{
LLiisstt<<Integer> pprriimmeess =
nneeww AA rr rr aa yy LL ii ss tt << >> (( )) ;;

ff oo rr ((int i = 22 ;; ii <= nn ;; ii++)) {{


iiff ((isPrime((ii)))) {{
pp rr ii mm ee ss .. add(( ii )) ;;
}}
}}
rreettuurrnn pp rr ii mm ee ss ;;
}}

pp rr ii vv aa tt ee
bboooolleeaann
isPrime((iinntt nnuumm)) {{
iiff ((nnuumm < 22 ))
rr ee tt uu rr nn ff aa ll ss ee ;;
ff oo rr ((int i = 22 ;; ii <=
Math.sqrt((nnuumm));; ii++)) {{
iiff ((num % ii == 00 ))
rr ee tt uu rr nn ff aa ll ss ee ;;

Approach 2 - Sieve of Eratosthenes (Optimal):

jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findPrimesSieve((iinntt nn )) {{
bb oo oo ll ee aa nn [[ ] isPrime = nneeww
bboooolleeaann[[nn + 11 ]] ;;
AArrrraayyss..fill((iissPPrriimmee,,
ttrruuee));;
iissPPrriimmee[[0] = iissPPrriimmee[[11]] = ffaallssee;;

ff oo rr ((int i = 22 ;; ii * ii
<= n;; ii++)) {{ iiff
(( ii ss PP rr ii mm ee [[ ii ]] ))
{{
ff oo rr ((int j = ii * ii;; jj <= n;; jj += ii)) {{
iissPPrriimmee[[jj]] = ffaallssee;;
}}
}}
}}

LLiisstt<<Integer> pprriimmeess =
nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;; ff oo rr
((int i = 22 ;; ii <= nn ;; ii++)) {{
iiff ((iissPPrriimmee[[ii]])) {{
pp rr ii mm ee ss .. add(( ii )) ;;
}}

15. Find maximum salary from Employee list (via Stream max)
Question: Find the employee with the maximum salary.

Approach 1 - Traditional Loop (Normal Method):

jav
a
ccllaassss
EEmmppllo
oyyeeee {{
SStt rr ii nn gg
nnaammee;
;
ddoouubblle
e
ssaallaarryy
;;

ppuubblliicc EEmmppllooyyeeee((Sttrriinngg
nnaammee,, ddoouubbllee ssaallaarryy)) {{
tt hh ii ss .. nn aa mm ee = nnaammee;;
tthhiiss..ssaallaarryy = ssaallaarryy;;
}}

pp uu bb ll ii cc
ddoouubbllee
getSalary(
getSalary ()) {{
rr ee tt uu rr nn
ssaallaarryy;;
}}
}}

pp uu bb ll ii cc EEmmppllooyyeeee
findMaxSalaryEmployee(
findMaxSalaryEmployee(LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess)) {{ iiff ((employees.
employees.isEmpty
isEmpty(())))
rr ee tt uu rr nn nn uu ll ll ;;

EEmmppllooyyeeee
mmaaxxEEmmpp =
eemmppllooyyeeeess..getget((00));;
ff oo rr ((EEmmppllooyyeeee
eemmpp : eemmppllooyyeeeess))
{{
iiff ((emp.
emp.getSalary
getSalary(()) > mm aa xx EE mm pp ..getSalary
getSalary(( )) )) {{
mmaaxxEEmmpp = eemmpp;;
}}
}}
rreettuurrnn mmaaxxEEmmpp;;
}}
// Time: O(n), Space: O(1)

Approach 2 - Stream API (Optimal):

java

pp uu bb ll ii cc EEmmppllooyyeeee
findMaxSalaryEmployee(LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess)) {{ rr ee tt uu rr nn
eemmppllooyyeeeess..stream(())
..max(Comparator..comparingDouble((EEmmppllooyyeeee::getSalary))))
16. File splitting logic: split a large file into N parts
Question: Split a large file into N equal parts.

Approach 1 - Simple Byte Reading (Normal Method):

java

pp uu bb ll ii cc vv oo ii dd splitFile(
splitFile(SSttrriinngg iinnppuuttFFiillee,,
iinntt nnuummPPaarrttss)) tthhrroowwss
IIOOEExxcceeppttiioonn {{ FFiillee ffiillee = nneeww
FFiillee((iinnppuuttFFiillee));;
lloonngg ffiilleeSSiizzee = ffiillee..length length(());;
lloonngg ppaarrttSSiizzee = ffiilleeSSiizzee / nnuummPPaarrttss;;

tt rr yy ((FileInputStream
FileInputStream ffiiss = nneeww
FF ii ll ee II nn pp uu tt SStt rr ee aa mm (( ff ii ll ee )) ))
{{ ff oo rr ((int int i = 00 ;; ii <
nnuummPPaarrttss;; ii++ ++)) {{
SStt rr ii nn gg outputFile = ii nn pp uu tt FF ii ll ee
+ "" .. pp aa rr tt "" + ((ii + 11));; lloonngg
bb yy tt ee ss TTo o Read = ((ii ==
nnuummPPaarrttss - 11 )) ?
ffiilleeSSiizzee - ((ppaa rrttSSiizzee * ii)) : ppaarrttSSiizzee;;

ttrryy ((FileOutputStream
FileOutputStream ff oo ss = nneeww
FF ii ll ee OO uu tt pp uu tt SStt rr ee aa mm (( oo uu tt pp uu tt FF ii
ll ee )) )) {{ bb yy tt ee [[]] buffer = nneeww
bb yy tt ee [[ 88 11 99 22 ]] ;;
lloonngg bbyytteessRReeaadd = 00 ;;
iinntt ll ee nn ;;

ww hh ii ll ee ((bbyytteessRReeaadd
< bbyytteessTTooRReeaadd &&
(( ll ee nn =
fis. read((bbuuffffeerr)))) != -11 ))
fis .read
{{
iinntt tt oo WW rr ii tt ee = (iinntt))
MMaatthh..min min((lleenn,,
bbyytteessTTooRReeaadd -
bb yy tt ee ss RRee aa dd )) ;;
ffooss..write
write((bbuuffffeerr,,
00,, ttooWWrriittee));;
bbyytteessRReeaadd +=
tt oo WW rr ii tt ee ;;
}}
}}
}}
}}
}}
// Time: O(fileSize), Space: O(buffer)
Approach 2 - BufferedInputStream/OutputStream (Optimal):

jav
a
pp uu bb ll ii cc vv oo ii dd splitFileOptimized(
splitFileOptimized(SSttrriinngg
iinnppuuttFFiillee,, iinntt nnuummPPaarrttss))
tthhrroowwss IIOOEExxcceeppttiioonn {{
FFiillee ffiillee = nneeww
FFiillee((iinnppuuttFFiillee)
);; lloonngg
ff ii ll ee SS ii zz ee =
ffiillee..length
length(());;
lloonngg pp aa rr tt SS ii zz ee = ( ff ii ll ee SS ii zz ee + nnuummPPaarrttss - 1) / nnuummPPaarrttss;; //
Ceiling division

ttrryy ((BBuuffffeerreeddIInnppuuttSSttrreeaamm bbiiss =


nneeww BBuuffffeerreeddIInnppuuttSStreamtream((nneeww
FFiilleeIInnppuuttSSttrreeaamm((ffiillee)))))) {{

ff oo rr ((int
int i = 00 ;; ii < nnuummPPaarrttss;; ii++ ++)) {{
SStt rr ii nn gg outputFile = ii nn pp uu tt FF ii ll ee
+ "" .. pp aa rr tt "" + ((ii + 11));; lloonngg
rreemmaaiinniinngg =
MMaa tthh..min min((ppaa rrttSSiizzee,,
ffiilleeSSiizzee - ((ii * ppaarrttSSiizzee))));;

ttrryy ((BBuuffffeerreeddOOuuttppuuttSSttrreeaamm bbooss =


nneeww BBuuffffeerreeddOOuuttppuuttSStream
tream((nneeww
FFiilleeOOuuttppuuttSSttrreeaamm((oouuttppuuttFFiillee)))))) {{

bbyyttee[[]] buffer = nneeww


bb yy tt ee [[ 88 11 99 22 ]] ;;
lloonngg ww rr ii tt tt ee nn =
00 ;;

wwhhiillee ((wwrriitttteenn < rreemmaaiinniinngg)) {{


iinntt ttooRRead ead = ((iinntt))
MMaatthh..min min((bbuuffffeerr..lleenn
ggtthh,, rreemmaaiinniinngg -
ww rr ii tt tt ee nn )) ;;
iinntt bbyytteessRRead
ead = bbiiss..read
read((bbuuffffeerr,, 00,, tt oo RRee aa dd )) ;;
iiff ((bbyytteessRReeaadd == -11 )) bb rr ee aa kk ;;

bbooss..write
write((bbuuffffeerr,,
00 ,,
bbyytteessRReeaadd));;
ww rr ii tt tt ee nn +=
bbyytteessRReeaadd;;
}}
}}
}}
}}
}}
// Time: O(fileSize), Space: O(buffer)
17. Program to count the string occurrence
Question: Count occurrences of each string in a list.

Approach 1 - Manual Counting (Normal Method):

jav
a
pp uu bb ll ii cc MM aa pp <Stt rr ii nn gg ,, IInntteeggeerr>>
countOccurrences((List<SSttrriinngg>> ssttrriinnggss)) {{
MM aa pp << St r i n g ,, IInntteeggeerr>>
ccoouunnttMMaapp = nneeww
HHaasshhMMaapp<<>>(());;

ffoorr ((SSttrriinngg ssttrr : ssttrriinnggss)) {{


cc oo uunnttMMaa pp.. put(ssttrr,, ccoouunnttMMaapp..getOrDefault((str, 00 )) + 11));;
}}
rreettuurrnn ccoouunnttMMaapp;;
}}

Approach 2 - Stream API (Optimal):

java

pp uu bb ll ii cc MM aa pp <Stt rr ii nn gg ,, LLoonngg>>
countOccurrencesStream(List<<SSttrriinngg>> ss tt rr ii nn gg ss ))
{{ rr ee tt uu rr nn ssttrriinnggss..stream(())
..collect((CCoolllleeccttoorrss..groupingBy((
FFuunncc ttiioo nn.
. identity(()),,
CCoolllleeccttoorr
ss..counting(())
)))); ;
}}

// For word count in a string:


pp uu bb ll ii cc MMaapp<Sttrriinngg,,
LLoonngg>> wordCount((SSttrriinngg
tteexxtt)) {{ rr ee tt uu rr nn
AArrrraayyss.stream((tteexxtt..split((""\\\\
ss++""))))
..collect((CCoolllleeccttoorrss..gr
oupingBy(( FFuunncc ttiioo nn..
identity(()),,

LinkedList, Stack, Tree, Map, Set


18. Reverse a linked list (iterative/recursive)
Question: Reverse a singly linked list.

Approach 1 - Iterative (Normal Method):

jav
a
cc ll aa ss ss
LLiissttNNoo
ddee {{
ii nn tt
vv aa ll ;;
LLiissttNNoo
ddee
nneexxtt;;
LLiissttNNooddee((int val)) {{ tthhiiss..vvaall = vvaall;; }}
}}

pp uu bb ll ii cc LLiissttNNooddee
reverseList((LLiissttNNooddee hheeaadd))
{{ LLiissttNNooddee pprreevv =
nn uu ll ll ;;
LLiissttNNooddee ccuurrrr = hheeaadd;;

ww hhiillee ((ccuurrrr != nnuullll)) {{


LLiissttNNooddee
nneexxttTTeemmpp =
ccuurrrr..nneexxtt;;
cc uu rr rr .. nn ee xx tt = pp rr ee vv ;;

Approach 2 - Recursive (Optimal for understanding):

java

pp uu bb ll ii cc LLiissttNNooddee
reverseListRecursive((LLiissttNNooddee
hheeaadd)) {{ iiff ((head == nn uu ll ll ||
hheeaadd..nneexxtt == nn uu ll ll )) {{
rreettuurrnn hheeaadd;;
}}

LLiissttNNooddee nneewwHHeeaadd =
reverseListRecursive((hheeaadd..nneexxtt));;
hh ee aa dd .. nn ee xx tt .. nn ee xx tt = hheeaadd;;
hheeaadd..nneexxtt = nn uu ll ll ;;

rreettuurrnn nneewwHHeeaadd;;
}}

19. Detect a cycle in linked list (Floyd's algorithm)


Question: Check if a linked list has a cycle.

Approach 1 - HashSet (Normal Method):

jav
a
pp uu bb ll ii cc bboooolleeaann
hasCycle((LLiissttNNooddee hheeaadd))
{{ SSeett<<ListNode> vv ii ss ii tt ee dd =
nneeww HHaasshhSSeett<<>>(());;
LLiissttNNooddee cc uu rr rr = hheeaadd;;

ww hhiillee ((ccuurrrr != nnuullll)) {{


iiff
((vviissiitteedd..contains
((ccuurrrr)))) {{
rr ee tt uu rr nn tt rr uu ee ;;
}}
vviissiitteedd..a
dd((ccuurrrr));;
ccuurrrr =
ccuurrrr..nneex
xtt;;
Approach 2 - Floyd's Cycle Detection (Optimal):

java

pp uu bb ll ii cc bboooolleeaann
hasCycle((LLiissttNNooddee
hheeaadd)) {{ iiff ((hheeaadd ==
nnuullll)) rr ee tt uu rr nn ffaallssee;;

LLiissttNNooddee
ssllooww =
hheeaadd;;
LLiissttNNooddee
ff aa ss tt =
hheeaadd;;

ww hh ii ll ee ((fast != nnuullll &&


ff aa ss tt .. nn ee xx tt != nnuullll))
{{ ssllooww =
ss ll oo ww .. nn ee xx tt ;;
ffaasstt = ffaasstt..nneexxtt..nneexxtt;;

iiff (( ss ll oo ww ==
ffaasstt)) {{

20.Find middle node in linked list


Question: Find the middle node of a linked list.

Approach 1 - Count and Traverse (Normal Method):

jav
a
pp uu bb ll ii cc LLiissttNNooddee
findMiddle((LLiissttNNooddee
hheeaadd)) {{ ii nn tt ll ee nn gg tt hh =
00 ;;
LLiissttNNooddee ccuurrrr = hheeaadd;;

// Count length
ww hhiillee ((ccuurrrr !
= nnuullll)) {{
ll ee nn gg tt hh + + ;;
ccuurrrr = ccuurrrr..nneexxtt;;
}}

// Find middle
ccuurrrr = hheeaadd;;
ff oo rr ((int i = 00 ;; ii <
ll ee nn gg tt hh / 2;; ii++))
{{ cc uu rr rr =
cc uu rr rr .. nn ee xx tt ;;
}}
rreettuurrnn cc uu rr rr ;;
Approach 2 - Two Pointer/Slow-Fast (Optimal):

java

pp uu bb ll ii cc LLiissttNNooddee
findMiddle((LLiissttNNooddee hheeaadd))
{{ LLiissttNNooddee ssllooww =
hheeaadd;;
LLiissttNNooddee ffaasstt = hheeaadd;;

ww hh ii ll ee ((fast != nnuullll &&


ff aa ss tt .. nn ee xx tt != nnuullll))
{{ ssllooww =
ss ll oo ww .. nn ee xx tt ;;
ffaasstt = ffaasstt..nneexxtt..nneexxtt;;
}}
rreettuurrnn ss ll oo ww ;;
}}

21. Implement stack using array


Question: Implement a stack data structure using an array.

Approach 1 - Basic Array Implementation:

jav
a
ccllaassss
AA rr rr aa yy SStt aa
c c kk {{
pp rr ii vv aa tt ee
iinntt[[]] aarrrr;;
pp rr ii vv aa tt ee
iinntt tt oo pp ;;
pprriivvaattee
iinntt
ccaappaacciittyy;;

ppuubblliicc
AArrrraayySSttaacck
k((iinntt ssiizzee)) {{
aa rr rr = nneeww
iinntt[[ssiizzee]];;
cc aa pp aa cc ii tt yy =
ssiizzee;;
ttoopp = -11 ;;
}}

ppuubblliicc
vv oo ii dd
push(
push (iinntt xx)) {{
iiff ((isFull
isFull(()))) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk
OO vv ee rr ff ll oo ww "" )) ;;
}}
aarrrr[[++
++ttoopp]] = xx;;
}}

pp uu bb ll ii cc
iinntt pop(
pop ())
{{ iiff
((isEmpty
isEmpty(()))
) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk
UU nn dd ee rr ff ll oo ww "" )) ;;
}}
rreettuurrnn aarrrr[[ttoopp---]];;
}}

pp uu bb ll ii cc
iinntt peek(
peek ())
{{ iiff
((isEmpty
isEmpty(())))
{{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk iiss ee mm pp tt yy "" )) ;;
}}
rreettuurrnn aa rr rr [[ tt oo pp ]] ;;
}}
pp uu bb ll ii cc
bboooolleeaann
isEmpty(
isEmpty ()) {{
rr ee tt uu rr nn ttoopp ==
-11 ;;
}}

pp uu bb ll ii cc
bboooolleeaann isFull(
isFull ())
{{ rreettuurrnn ttoopp
== ccaappaacciittyy -
11;;
}}

pp uu bb ll ii cc
iinntt size(
size ()) {{
rreettuurrnn
ttoopp + 11;;
}}
}}
// Time: O(1) for all operations, Space: O(n)
Approach 2 - Dynamic Array (Optimal):

java
ccllaassss
DDyynnaammiiccAA
rrrraayySSttaacckk
{{ pp rr ii vv aa tt ee
iinntt[[]] aarrrr;;
pp rr ii vv aa tt ee
iinntt tt oo pp ;;
pprriivvaattee
iinntt
ccaappaacciittyy;;

ppuubblliicc
DDyynnaammiiccAArrrr
aayySSttaacckk(()) {{
cc aa pp aa cc ii tt yy =
11 00 ;;
aa rrrr = nneeww iinntt[[ccaappaacciittyy]];;
ttoopp = -11 ;;
}}

ppuubblliicc vv oo ii dd push(
push (iinntt xx)) {{
iiff ((ttoo pp ==
ccaappaacciittyy -
11)) {{ resize(
resize ());;
}}
aarrrr[[++++ttoopp]] = xx;;
}}

pp rr ii vv aa tt ee
vv oo ii dd
resize(
resize ()) {{
cc aa pp aa cc ii tt
yy *= 22 ;;
aa rr rr = Arrays.
Arrays.copyOf(
copyOf (aarrrr,, cc aa pp aa cc ii tt yy )) ;;
}}

pp uu bb ll ii cc
iinntt pop(
pop ())
{{ iiff
((isEmpty
isEmpty(()))
) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk
UU nn dd ee rr ff ll oo ww "" )) ;;
}}
rreettuurrnn aarrrr[[ttoopp---]];;
}}

pp uu bb ll ii cc
iinntt peek(
peek ())
{{ iiff
((isEmpty
isEmpty(())))
{{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk iiss ee mm pp tt yy "" )) ;;
}}
rreettuurrnn aa rr rr [[ tt oo pp ]] ;;
}}

pp uu bb ll ii cc
bboooolleeaann
isEmpty(
isEmpty ()) {{
rr ee tt uu rr nn ttoopp ==
-11 ;;
}}

pp uu bb ll ii cc
iinntt size(
size ()) {{
rreettuurrnn
ttoopp + 11;;
}}
}}
// Time: O(1) amortized, Space: O(n)

22.Implement stack using linked list


Question: Implement a stack using a linked list.

Approach - LinkedList Implementation:

java
ccllaassss
LLiinnkkeeddLLiis
sttSSttaacckk {{
pprriivvaattee
ccllaassss
NNooddee {{
ii nn tt
dd aa tt aa
;;
NNoodde
e
nneexxtt;
;

NNooddee((iinntt
dd aa tt aa )) {{
tthhiiss..ddaattaa
= ddaattaa;;
}}
}}

pprriivvaattee
NNooddee
ttoopp;;
pp rr ii vv aa tt ee
iinntt ssiizzee;;

ppuubblliicc
LLiinnkkeeddLLiissttS
Sttaacckk(()) {{
ttoopp = nn uu ll ll ;;
ssiizzee = 00;;
}}

ppuubblliicc vv oo ii dd push(
push (iinntt xx)) {{
NNooddee nneewwNNooddee =
nneeww NNooddee((xx));;
nneewwNNooddee..nneexxtt =
tt oo pp ;;
ttoopp =
nneewwNNoodd
ee;; ss ii zz ee +
+ ;;
}}

pp uu bb ll ii cc
iinntt pop(
pop ())
{{ iiff
((isEmpty
isEmpty(()))
{
) {
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk
UU nn dd ee rr ff ll oo ww "" )) ;;
}}
iinntt ddaattaa
=
ttoopp..ddaattaa
;; ttoopp =
tt oo pp .. nn ee xx t
t ;; ss ii zz ee - -;;
rreettuurrnn dd aa tt aa ;;
}}

pp uu bb ll ii cc
iinntt peek(
peek ())
{{ iiff
((isEmpty
isEmpty(())))
{{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk iiss ee mm pp tt yy "" )) ;;
}}
rreettuurrnn tt oo pp .. dd aa tt aa ;;
}}

pp uu bb ll ii cc
bboooolleeaann
isEmpty(
isEmpty ()) {{
rr ee tt uu rr nn ttoopp ==
nnuullll;;
}}
pp uu bb ll ii cc
iinntt size(())
{{ rr ee tt uu rr
nn ss ii zz ee ;;
}}
}}
// Time: O(1) for all operations, Space: O(n)

23.Implement queue using array


Question: Implement a queue using an array.

Approach 1 - Simple Array (Normal Method):

java
cc ll aa ss ss
AArrrraayyQQuue
euuee {{
pp rr ii vv aa tt ee
iinntt[[]] aarrrr;;
pp rr ii vv aa tt ee
iinntt ffrroonntt;;
pp rr ii vv aa tt ee
iinntt rreeaarr;;
pp rr ii vv aa tt ee
iinntt ssiizzee;;
pprriivvaattee
iinntt
ccaappaacciittyy;;

ppuubblliicc
AArrrraayyQQuueeuuee((iinntt
ccaappaacciittyy)) {{
tthhiiss..ccaappaacciittyy =
ccaappaacciittyy;;
aarrrr = nneeww
iinntt[[ccaappaacciittyy]
];; ff rr oo nn tt = 00 ;;
rr ee aa rr = -11;;
ssiizzee = 00;;
}}

pp uu bb ll ii cc vv oo ii dd
enqueue(
enqueue (iinntt xx))
{{ iiff ((isFull
isFull(()))) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""QQuueeuuee
OO vv ee rr ff ll oo ww "" )) ;;
}}
rreeaarr = ((rreeaarr +
1 1 )) %
ccaappaacciittyy;;
aa rr rr [[ rr ee aa rr ]] =
xx;;
ss ii zz ee ++;
++ ;
}}

pp uu bb ll ii cc iinntt
dequeue(
dequeue ()) {{ iiff
((isEmpty
isEmpty(()))) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""QQuueeuuee
UU nn dd ee rr ff ll oo ww "" )) ;;
}}
iinntt ddaattaa = aarrrr[[ffrroonntt]];;
ffrroonntt = ((ffrroonntt +
11)) % ccaappaacciittyy;;
ss ii zz ee - -;;
rreettuurrnn dd aa tt aa ;;
}}

pp uu bb ll ii cc
iinntt peek(
peek ())
{{ iiff
((isEmpty
isEmpty(())))
{{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""QQuueeuuee iiss
ee mm pp tt yy "" )) ;;
}}
rreettuurrnn aa rr rr [[ ff rr oo nn tt ]] ;;
}}

pp uu bb ll ii cc
bboooolleeaann
isEmpty(
isEmpty ()) {{
rr ee tt uu rr nn ss ii zz ee
== 00 ;;
}}

pp uu bb ll ii cc bboooolleeaann isFull(
isFull ()) {{
rreettuurrnn ssiizzee == ccaappaacciittyy;;
}}

pp uu bb ll ii cc
iinntt size(())
{{ rr ee tt uu rr
nn ss ii zz ee ;;
}}
}}
// Time: O(1) for all operations, Space: O(n)
Approach 2 - Circular Queue (Optimal):

java
ccllaassss
CCiirrccuullaarr
QQuueeuuee
{{ pp rr ii vv aa tt
ee iinntt[[]]
aarrrr;;
pprriivvaattee iinntt ffrroonntt,, rreeaarr,, ssiizzee,, ccaappaacciittyy;;

ppuubblliicc
CCiirrccuullaarrQQuuee
uuee((iinntt kk)) {{
cc aa pp aa cc ii tt yy =
kk ;;
aarrrr =
nneeww
iinntt[[kk]];;
ff rr oo nn tt = -
11 ;;
rr ee aa rr = -11;;
ssiizzee = 00;;
}}

pp uu bb ll ii cc bboooolleeaann
enqueue(
enqueue (iinntt vv aa ll uu ee ))
{{ iiff ((isFull
isFull(())))
rr ee tt uu rr nn ff aa ll ss ee ;;

iiff ((isEmpty
isEmpty(())))
{{ ff rr oo nn tt
= 00 ;;
}}
rreeaarr = ((rreeaarr +
1 1 )) %
ccaappaacciittyy;;
aarrrr[[rreeaarr]] =
vv aa ll uu ee ;;
ss ii zz ee +
+ ;;
rreettuurr
nn
ttrruuee;;
}}

pp uu bb ll ii cc
bboooolleeaann
dequeue(
dequeue ()) {{ iiff
((isEmpty
isEmpty(())))
rr ee tt uu rr nn
ffaallssee;;

iiff ((ffrroonntt
== rreeaarr))
{{ ff rr oo nn tt
= -11 ;;
rr ee aa rr = -11;;
}} eellssee {{
ffrroonntt = ((ffrroonntt + 11)) % ccaappaacciittyy;;
}}
ss ii zz ee -
-;;
rreettuurr
nn
ttrruuee;;
}}

pp uu bb ll ii cc iinntt front(
front ()) {{
rr ee tt uu rr nn isEmpty()
isEmpty() ? -11 : aa rr rr [[ ff rr oo nn tt ]] ;;
}}

pp uu bb ll ii cc iinntt rear(
rear ()) {{
rr ee tt uu rr nn isEmpty()
isEmpty() ? -11 : aa rr rr [[ rr ee aa rr ]] ;;
}}

pp uu bb ll ii cc bboooolleeaann isEmpty(
isEmpty ()) {{
rreettuurrnn ssiizzee == 00;;
}}

pp uu bb ll ii cc
bboooolleeaann isFull(())
{{ rreettuurrnn ssiizzee
== ccaappaacciittyy;;
}}
}}
// Time: O(1) for all operations, Space: O(n)

24.Implement queue using linked list


Question: Implement a queue using a linked list.

Approach - LinkedList Implementation:

java
ccllaassss
LLiinnkkeeddLLiis
sttQQuueeuuee
{{ pprriivvaattee
ccllaassss
NNooddee {{
ii nn tt
dd aa tt aa
;;
NNoodde
e
nneexxtt;
;

NNooddee((iinntt
dd aa tt aa )) {{
tthhiiss..ddaattaa
= ddaattaa;;
}}
}}

pprriivvaattee NNooddee
ffrroonntt,, rreeaarr;;
pp rr ii vv aa tt ee iinntt
ssiizzee;;

ppuubblliicc
LLiinnkkeeddLLiissttQQ
uueeuuee(()) {{
ff rr oo nn tt = nnuullll;;
rreeaarr = nnuullll;;
ssiizzee = 00;;
}}

pp uu bb ll ii cc vv oo ii dd enqueue(
enqueue (iinntt xx)) {{
NNooddee nneewwNNooddee = nneeww NN oo dd ee (( xx )) ;;

iiff ((rreeaa rr == nnuullll)) {{


ffrroonntt = rreeaarr = nneewwNNooddee;;
}} eellssee {{
rreeaarr..nneexxtt =
nneewwNNooddee;;
rr ee aa rr =
nneewwNNooddee;;
}}
ss ii zz ee ++;
++ ;
}}

pp uu bb ll ii cc iinntt
dequeue(
dequeue ()) {{ iiff
((isEmpty
isEmpty(()))) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""QQuueeuuee
UU nn dd ee rr ff ll oo ww "" )) ;;
}}

iinntt ddaattaa =
ffrroonntt..ddaattaa;;
ff rr oo nn tt =
ffrroo nntt.. nneexxtt;;

iiff ((ffrroonntt
== nnuullll))
{{ rr ee aa rr
= nn uu ll ll ;;
}}
ss ii zz ee - -;
;
rreettuurr
nn
ddaattaa;;
}}
pp uu bb ll ii cc
iinntt peek(())
{{ iiff
((isEmpty(()))
) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""QQuueeuuee iiss
ee mm pp tt yy "" )) ;;
}}
rreettuurrnn ff rr oo nn tt .. dd aa tt aa ;;
}}

pp uu bb ll ii cc
bboooolleeaann
isEmpty(()) {{
rr ee tt uu rr nn
ff rr oo nn tt ==
nnuullll;;
}}

25.Convert ArrayList to Set and back (removes duplicates)


Question: Convert ArrayList to Set to remove duplicates, then back to List.

Approach 1 - Using Constructor (Normal Method):

java

pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicates((LLiisstt<<IInntteeggeerr>>
lliisstt)) {{ SSeett<<Integer> ss ee tt = nneeww
HH aa ss hh SS ee tt << >> (( ll ii ss tt )) ;;
rreettuurrnn nneeww AArrrraayyLLiisstt<<>>((sseett));;
}}
// Time: O(n), Space: O(n)
// Note: Order is not preserved with HashSet

Approach 2 - LinkedHashSet for Order (Optimal):

java

pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicatesOrdered((LLiisstt<<IInntteeggeerr>>
lliisstt)) {{ SSeett<<Integer> sseett = nneeww
LL ii nn kk ee dd HH aa ss hh SS ee tt << >> (( ll ii ss tt )) ;;
rreettuurrnn nneeww AArrrraayyLLiisstt<<>>((sseett));;
}}
// Time: O(n), Space: O(n)
// Order is preserved
Approach 3 - Stream API:
java

pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicatesStream((LLiisstt<<IInntteeggeerr>>
lliisstt)) {{ rr ee tt uu rr nn lliisstt..stream(())
..distinct(())
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}
// Time: O(n), Space: O(n)

26.Sort a Set (convert to List, Collections.sort)


Question: Sort elements in a Set.

Approach 1 - Convert to List and Sort (Normal Method):

java

pp uu bb ll ii cc LLiisstt<Integer>>
sortSet((SSeett<<IInntteeggeerr>>
sseett)) {{ LLiisstt<<Integer> lliisstt =
nneeww
AA rr rr aa yy LL ii ss tt << >> (( ss ee tt )) ;;
CCoolllleeccttiioonnss..sort((lliisstt));;
rreettuurrnn lliisstt;;
}}

Approach 2 - TreeSet for Auto-Sort (Optimal):

java

pp uu bb ll ii cc SSeett<Integer>>
sortedSet((SSeett<<IInntteeggeerr>>
sseett)) {{ rreettuurrnn nneeww
TTrreeeeSSeett<<>>((sseett));;
}}
// Time: O(n log n), Space: O(n)
Approach 3 - Stream API:

jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
sortSetStream((SSeett<<IInntteeggeerr>>
sseett)) {{ rr ee tt uu rr nn sseett..stream(())
..sorted(())
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}

// With custom comparator:


pp uu bb ll ii cc LLiisstt<Integer>>
sortSetDescending((SSeett<<IInntteeggeerr>>
ss ee tt )) {{ rr ee tt uu rr nn sseett..stream(())
..sorted((CCoommppaarraattoorr..reverseOrder(())))
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}
// Time: O(n log n), Space: O(n)

27.Coding for frequency count in HashMap (words/chars)


Question: Count frequency of words or characters using HashMap.

Approach 1 - Character Frequency (Normal Method):

java

pp uu bb ll ii cc MMaapp<Character,, IInntteeggeerr>>
charFrequency((SSttrriinngg ss)) {{
MMaapp<<Character, IInntteeggeerr>>
ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());;

ff oo rr ((char c : ss..toCharArray(()))) {{
ffrreeqqMMaapp..put(cc,, ffrreeqqMMaapp..getOrDefault((c, 00 )) + 11));;
}}
rreettuurrnn ffrreeqqMMaapp;;
}}

Approach 2 - Word Frequency:

jav
a
pp uu bb ll ii cc MM aa pp <Stt rr ii nn gg ,, IInntteeggeerr>>
wordFrequency((SSttrriinngg tteexxtt)) {{
MM aa pp << String,, IInntteeggeerr>>
ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());; SStt rr ii nn gg []
wwoorrddss = tteexxtt..split((""\\\\ss++""));;

ffoorr ((SSttrriinngg wwoorrdd : wwoorrddss)) {{


ff rr ee qq MM aa pp .. put(ww oo rr dd ,, ffrreeqqMMaapp..getOrDefault((word, 00 )) + 11));;
}}
rreettuurrnn ffrreeqqMMaapp;;
}}

Approach 3 - Stream API (Optimal):

java

pp uu bb ll ii cc MMaapp<Character,, LLoonngg>>
charFrequencyStream((SSttrriinngg ss)) {{
rr ee tt uu rr nn ss..chars(())
..mapToObj(cc -> (( cc hh aa rr )) cc))
..collect((CCoolllleeccttoorrss..gr
oupingBy(( FFuunncc ttiioo nn..
identity(()),,
CCoolllleeccttoorrss..counting
(( ))
)))); ;
}}

pp uu bb ll ii cc MM aa pp <Stt rr ii nn gg ,, LLoonngg>>
wordFrequencyStream((SSttrriinngg tteexxtt)) {{
rr ee tt uu rr nn
AArrrraayyss.stream((tteexxtt..split((""\\\\ss++""))))
..collect((CCoolllleeccttoorrss..gr
oupingBy(( FFuunncc ttiioo nn..
identity(()),,
CCoolllleeccttoorrss..counting
(( ))

28.Find longest substring without repeating characters


Question: Find the length of the longest substring without repeating characters.

Approach 1 - Brute Force:

jav
a
pp uu bb ll ii cc ii nn tt
lengthOfLongestSubstring((SSttrriinngg ss))
{{ ii nn tt mmaaxxLLeenn = 00 ;;

ff oo rr ((int i = 00 ;; ii < s.length(());; ii++))


{{ SSeett<<Character> sseeeenn =
nneeww HHaasshhSSeett<<>>(());;
ff oo rr ((int j = ii;; jj < s.length(());; jj+
+)) {{
iiff
((seen.contains((ss..charAt((jj))
)))) {{ bb rr ee aa kk ;;
}}
ss ee ee nn .. add(ss .. charAt(( jj )) )) ;;
mmaaxxLLeenn = Math.max((mmaaxxLLeenn,, jj - ii + 11 )) ;;
}}
}}
rreettuurrnn mmaaxxLLeenn;;
}}
Approach 2 - Sliding Window with Set (Optimal):

java

pp uu bb ll ii cc ii nn tt
lengthOfLongestSubstring((SSttrriinngg ss))
{{ SSeett<<Character> ss ee tt =
nneeww HHaasshhSSeett<<>>(());;
iinntt mmaaxxLLeenn = 00;;
iinntt lleefftt = 00;;

ff oo rr ((int right = 00 ;; rr ii gg hh tt <


s.length(());; rr ii gg hh tt ++)) {{
ww hh ii ll ee
((set.contains((ss..charAt((rriigghhtt))))))
{{
sseett..remove(ss..charAt((lleefftt))));;
ll ee ff tt ++;;
}}
sseett..add(ss..charAt((rriigghhtt))));;
mmaaxxLLeenn = Math.max((mmaaxxLLeenn,, rr ii gg hh tt - lleefftt + 11));;
}}
rreettuurrnn mmaaxxLLeenn;;
Approach 3 - Sliding Window with HashMap:

jav
a
pp uu bb ll ii cc ii nn tt
lengthOfLongestSubstring((SSttrriinngg ss)) {{
MMaapp<<Character, IInntteeggeerr>>
mmaapp = nneeww
HHaasshhMMaapp<<>>(());; ii nn tt
mmaaxxLLeenn = 00 ;;
iinntt lleefftt = 00;;

ff oo rr ((int right = 00 ;; rr ii gg hh tt <


s.length(());; rr ii gg hh tt ++)) {{ cc hh aa rr
cc = ss..charAt((rriigghhtt));;

iiff ((map.containsKey((cc)))) {{
ll ee ff tt = Math.max((lleefftt,, mm aa pp .. get(cc )) + 11 )) ;;
}}

mmaapp..put((cc,, rr ii gg hh tt )) ;;
mmaaxxLLeenn = Math.max((mmaaxxLLeenn,, rr ii gg hh tt - lleefftt + 11));;
}}
rreettuurrnn mmaaxxLLeenn;;
}}

29.Flatten a list of lists using flatMap


Question: Flatten a nested list structure.

Approach 1 - Nested Loop (Normal Method):

java

pp uu bb ll ii cc LLiisstt<Integer>>
flatten((LLiisstt<<LLiisstt<<Integer>>>>
nn ee ss tt ee dd LL ii ss tt )) {{ LLiisstt<<Integer>
rreessuulltt = nneeww AA rr rr aa yy LL ii ss tt << >> (( )) ;;

ffoorr ((List<IInntteeggeerr>>
iinnnneerrLLiisstt :
nneesstteeddLLiisstt)) {{ ffoorr
(( II nn tt ee gg ee rr nnuumm :
iinnnneerrLLiisstt)) {{
rreessuulltt..add((nnuumm));;
}}
}}

Approach 2 - Stream flatMap (Optimal):

jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
flattenStream((LLiisstt<<List<IInntteeggeerr>>>>
nn ee ss tt ee dd LL ii ss tt )) {{ rr ee tt uu rr nn
nneesstteeddLLiisstt..stream(())
..flatMap((LLiisstt::stream))
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}

// For array of arrays:


pp uu bb ll ii cc LLiisstt<Integer>>
flattenArrays((IInntteeggeerr[[]][[]]
aa rr rr aa yy ss )) {{ rr ee tt uu rr nn
AArrrraayyss..stream((aarrrraayyss))
.. flatMap(( AA rr rr aa yy ss ::stream))
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;

30.Map vs flatMap use case code


Question: Demonstrate the difference between map and flatMap.

Map Example - One-to-One Transformation:

java

// Map: transforms each element to another element


pp uu bb ll ii cc LLiisstt<Integer>>
mapExample((LLiisstt<<SSttrriinngg>>
ssttrriinnggss)) {{ rr ee tt uu rr nn
ssttrriinnggss..stream(())
..map((SSttrriinngg::length))
..collect((CCoolllleeccttoorrss..toList(())));;
}}

// Input: ["hello", "world"]


// Output: [5, 5]

FlatMap Example - One-to-Many Transformation:

jav
a
// FlatMap: transforms each element to a stream, then flattens
pp uu bb ll ii cc LLiisstt<Character>>
flatMapExample((LLiisstt<<SSttrriinngg>>
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
ssttrriinnggss..stream(())
..flatMap(s -> ss.chars().mapToObj((cc -> (( cc hh aa rr )) cc))))
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}

// Input: ["hello", "world"]


// Output: [h, e, l, l, o, w, o, r, l, d]

// Another example with nested lists:


pp uu bb ll ii cc LLiisstt<Sttrriinngg>> flatMapNested((LLiisstt<List<SSttrriinngg>>>>
nn ee ss tt ee dd LL ii ss tt ss )) {{
// Using map - returns List<Stream<String>>
// nestedLists.stream().map(List::stream)

// Using flatMap - returns Stream<String>


rreettuurrnn nn ee ss tt ee dd LL ii ss tt ss .. stream(( ))
..flatMap((LLiisstt::stream))
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}

Complete Comparison:

jav
a
ccllaassss MMaappVVssFFllaattMMaappDDeemmoo {{

// Map: List<String> -> List<Integer>


pp uu bb ll ii cc LLiisstt<
<Integer>
Integer >
usingMap(
usingMap (LLiisstt<<SSttrriinngg>>
wwoorrddss)) {{ rr ee tt uu rr nn
wwoorrddss..stream
stream(())
..map
map((SSttrriinngg::length
::length))
..collect
collect((CCoolllleeccttoorrss..toList
toList(())));;
}}

// FlatMap: List<String> -> List<String> (split words)


ppuubblliicc LLiisstt< <Sttrriinngg>>
usingFlatMap(
usingFlatMap (LLiisstt<<SSttrriinngg>>
ss ee nn tt ee nn cc ee ss )) {{ rr ee tt uu rr nn
sseenntteenncceess..stream stream(())
..flatMap
flatMap(sentence
(sentence -> AA rr rr aa yy ss ..stream
stream(( ss ee nn tt ee nn cc ee..split(
split ( "" ""))))))
..collect
collect((CCoolllleeccttoorrss..toList toList(())));;
}}

// Nested Employee example:


ssttaa ttiicc cc ll aa ss ss
DDeeppaarrttmmeenntt
{{ LLiisstt<<EEmmppllo
oyyeeee>>
eemmppllooyyeeeess;;
pp uu bb ll ii cc LLiisstt<
<Employee>
Employee > getEmployees(
getEmployees ()) {{ rr ee tt uu rr nn eemmppllooyyeeeess;; }}
}}

ssttaattiicc ccllaassss
EEmmppllooyyeeee
{{ SS tt rr ii nn gg
nnaammee;;
pp uu bb ll ii cc SString
tring getName(
getName ()) {{ rr ee tt uu rr nn nnaammee;; }}
}}

// Get all employee names from all departments


pp uu bb ll ii cc LLiisstt<
<Sttrriinngg>>
getAllEmployeeNames(
getAllEmployeeNames (LLiisstt<<DDeeppaarrttmmeenntt>>
ddeeppaarrttmmeennttss)) {{ rr ee tt uu rr nn
ddeeppaarrttmmeennttss..stream stream(())
..flatMap
flatMap(dept
(dept -> ddeepptt..getEmployees
getEmployees(())..stream
stream(())))
..map
map((EEmmppllooyyeeee::getName
::getName))
..collect
collect((CCoolllleeccttoorrss..toList
toList(())));;
}}
}}

31. Remove duplicate Objects in Set (equals/hashCode override)


Question: Remove duplicate custom objects using Set.
Approach 1 - Override equals and hashCode (Optimal):

jav
a
ccllaassss PPeerrssoonn {{
pprriivvaattee
SSttrriinngg
nnaammee;;
pp rr ii vv aa tt ee
iinntt aa gg ee ;;

pp uu bb ll ii cc PPerson
erson((SSttrriinngg
nnaammee,, iinntt aaggee)) {{
tt hh ii ss .. nn aa mm ee =
nnaammee;;
tthhiiss..aaggee = aa ggee;;
}}

@@OOvveerrrriiddee
ppuubblliicc bboooolleeaann
equals(
equals (OObbjjeecctt oo))
{{ iiff ((tthhiiss == oo ))
rr ee tt uu rr nn ttrruuee;;
iiff ((o
o == nn uu ll ll || getClass(
getClass ()) != o.getClass
o.getClass(())))
rr ee tt uu rr nn ff aa ll ss ee ;; PPeerrssoonn
ppeerrssoonn = (( PPee rr ss oo nn )) oo ;;
rr ee tt uu rr nn aaggee ==
ppeerrssoonn..aaggee &&
OObbjjeeccttss..equalsequals((nnaammee,,
ppeerrssoonn..nnaammee));;
}}

@@OOvveerrrriiddee
pp uu bb ll ii cc ii nn tt hashCode(
hashCode ()) {{
rreettuurrnn OObbjjeeccttss..hash hash((nnaammee,, aaggee));;
}}

// Getters
pp uu bb ll ii cc SString
tring getName(
getName ()) {{
rr ee tt uu rr nn nnaammee;; }}
pp uu bb ll ii cc iinntt getAge(
getAge ()) {{
rr ee tt uu rr nn aa gg ee ;; }}
}}

pp uu bb ll ii cc SS ee tt<
< Pee rr ss oo nn >>
removeDuplicateP
removeDuplicatePersons(
ersons (LLiisstt<<P Peerrssoonn>>
pp ee rr ss oo nn ss )) {{ rr ee tt uu rr nn nneeww
HHaasshhSSeett<<>>((ppeerrssoonnss));;
}}
// Time: O(n), Space: O(n)

Approach 2 - Using Stream with Comparator:

jav
a
pp uu bb ll ii cc LLiisstt<Peerrssoo nn>>
removeDuplicatesStream((LLiisstt<<Peerrssoonn>>
pp ee rr ss oo nn ss )) {{ rr ee tt uu rr nn
ppeerrssoonnss..stream(())
.. collect((CC oo lllleecc ttoo rrss.. toMap((
pp -> p.getName(()) + ""--"" + pp..getAge(()),,
FF uu nn cc tt ii oo nn .. identity(( )) ,,
((eexxiissttiinngg,, rreeppllaacceemmeenntt)) -> eexxiissttiinngg
))))
..values(())
..stream(())
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}
// Time: O(n), Space: O(n)

Advanced & Misc Java Logic Questions


32.ExecutorService concurrency sample (multi-thread)
Question: Demonstrate multi-threading using ExecutorService.

Approach 1 - Fixed Thread Pool:

jav
a
pp uu bb ll ii cc vv oo ii dd executorServiceExample(()) {{
EE xx ee cc uu tt oo rr SS ee rr vv ii cc ee eexxeeccuuttoorr = Executors..newFixedThreadPool((33));;

ff oo rr ((int i = 11 ;; ii <=
55 ;; ii++)) {{ ff ii nn aa ll
ii nn tt tt aa ss kk II dd =
ii;;
eexxeeccuuttoorr..sub
mit(((()) -> {{
SSyysstteemm.out..println((""TTaasskk "" + tt aa ss kk II dd +
"" eexxeeccuutteedd by " +
TThhrreeaadd..currentThread(())..getName(())));;
tt rr yy {{
TT hh rr ee aa dd .. sleep(( 11 00 00 00 )) ;;
}} ccaattcchh
((IInntteerrrruupptteeddEEx
xcceeppttiioonn ee)) {{
ee .. printStackTrace(( )) ;;
}}
} } )); ;
}}

eexxeeccuuttoorr..sh
utdown(());; tt rr yy
{{
eexxeeccuuttoorr..awaitTermination((1100,, TTiimmeeUUnniitt..SSEECCOONNDDSS));;
}} ccaattcchh
Approach 2 - Callable with Future (Optimal):

jav
a
pp uu bb ll ii cc vv oo ii dd executorServiceWithReturn(())
tthhrroowwss EExxcceeppttiioonn {{
EE xx ee cc uu tt oo rr SS ee rr vv ii cc ee eexxeeccuuttoorr
= Executors..newFixedThreadPool((33));;
LLiisstt<<Future<IInntteeggeerr>>>>
ff uu tt uu rr ee ss = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;

// Submit tasks
ff oo rr ((int i = 11 ;; ii
<= 55 ;; ii++)) {{
ff ii nn aa ll ii nn tt
nnuumm = ii;;
CCaallllaabbllee<<IInntteeggeerr>> ttaasskk = (()) -> {{
TThhrreeaadd..sle
ep((11000000));;
rr ee tt uu rr nn
nnuum m *
nnuum m ; ;
}};;
ffuuttuurreess..add(eexxeeccuuttoorr..submit((ttaasskk))));;
}}

// Get results

Approach 3 - CompletableFuture:

jav
a
pp uu bb ll ii cc vv oo ii dd completableFutureExample(
completableFutureExample ()) {{
LLiisstt<<CompletableFuture
CompletableFuture< <IInntteeggeerr>>>> ff uu tt uu rr ee ss = nneeww
AArrrraayyLLiisstt<<>>(());;

ff oo rr ((intint i = 11 ;; ii <=
55 ;; ii++++)) {{ ff ii nn aa ll
ii nn tt nnuumm = ii;;
CCoommpplleettaabblleeFFuuttuurree<<Integer
Integer>
> ffuuttuurree =
CCoommpplleettaabblleeFFuuttuurree..supplyAsync
supplyAsync(((()) -> {{
tt rr yy {{
TThhrreeaadd..sleep
sleep((11000000));;
}} ccaattcchh
((IInntteerrrruupptteeddEExxcceeppttiio
onn ee)) {{ ee..print
printS
StackT
tackTrace(
race ());;
}}
rreettuurrnn nnuumm * nnuumm;;
} } )); ;
ffuuttuurreess..addadd((ffuuttuurree));;
}}

// Wait for all and collect results


CCoommpplleettaabblleeFFuuttuurree..allOf
allOf((ffuuttuurreess..toArray
toArray((nneeww
CCoommpplleettaabblleeFFuuttuurree[[00]]))))
..join
join(());;

ffuuttuurreess..for
for
Each(
Each (ff -> {{
tt rr yy {{
SSyysstteemm.out.out..println
println((""RReessuulltt:: "" + f..get
get(())));;
}} ccaattcchh
((EExxcceeppttiioonn
ee)) {{
ee..print
printS
StackT
tackTrace(
race ()
); ;
}}
} } )); ;
}}

33.Thread-safe Singleton implementation, lazy/early init


Question: Implement a thread-safe Singleton pattern.

Approach 1 - Early Initialization:

jav
a
ccllaassss EEaarrllyySSiinngglleettoonn {{
pp rr ii vv aa tt ee ss tt aa tt ii cc final EarlySingleton IINNSSTTAANNCCEE = nneeww
EE aa rr ll yy SS ii nn gg ll ee tt oo nn (( )) ;;

pprriivvaattee EEaarrllyySSiinngglleettoonn(()) {{
// Private constructor
}}

pp uu bb ll ii cc ssttaattiicc
EE aa rr ll yy SS ii nn gg ll ee tt oo nn
getInstance(()) {{ rr ee tt uu rr nn
IINNSSTTAANNCCEE;;
}}
}}
// Thread-safe, but creates instance even if not needed
Approach 2 - Lazy with Synchronized (Normal Method):

java

ccllaassss LLaazzyySSiinngglleettoonn {{
pprriivvaattee ssttaattiicc LLaazzyySSiinngglleettoonn iinnssttaannccee;;

pprriivvaattee
LLaazzyySSiinngglleettoo
nn( ( ) ) { {
// Private constructor
}}

pp uu bb ll ii cc ssttaattiicc
ssyynncchhrroonniizzeedd
LL aa zz yy SS ii nn gg ll ee tt oo nn getInstance(()) {{
iiff (( ii nn ss tt aa nn cc ee == nnuullll)) {{
iinnssttaannccee = nneeww LLaazzyySSiinngglleettoonn(());;
}}
rreettuurrnn ii nn ss tt aa nn cc ee ;;
}}
}}

Approach 3 - Double-Checked Locking (Optimal):

jav
a
ccllaassss DDoouubblleeCChheecckkeeddSSiinngglleettoonn {{
pprriivvaattee ssttaattiicc vvoollaattiillee DDoouubblleeCChheecckkeeddSSiinngglleettoonn
iinnssttaannccee;;

pprriivvaattee DDoouubblleeCChheecckkeeddSSiinngglleettoonn(()) {{
// Private constructor
}}

pp uu bb ll ii cc ss tt aa tt ii cc
DDoouubblleeCChheecckkeeddSSiinngglleet
toonn getInstance(()) {{ iiff
(( ii nn ss tt aa nn cc ee == nn uu ll ll )) {{
ssyynncchhrroonniizzeedd
((DDoouubblleeCChheecckkeeddSSiinn
gglleettoonn..ccllaassss)) {{ iiff
(( ii nn ss tt aa nn cc ee == nn uu ll ll )) {{
iinnssttaannccee = nneeww DDoouubblleeCChheecckkeeddSSiinngglleettoonn(());;
}}
}}
}}
rreettuurrnn ii nn ss tt aa nn cc ee ;;
}}

Approach 4 - Bill Pugh (Best Practice):

java

ccllaassss
BBiillllPP uugghhSSiinngg
lleettoo nn {{
pprriivvaattee
BBiillllPPuugghhSSiinnggll
eettoonn(()) {{
// Private constructor
}}

pprriivvaattee ssttaattiicc ccllaassss SSiinngglleettoonnHHeellppeerr {{


pprriivvaattee ssttaattiicc ffiinnaall
BBiillllPPuugghhSSiinngglleettoonn
IINNSSTTAANNCCEE = nneeww
BBiillllPPuugghhSSiinngglleettoonn(());;
}}

pp uu bb ll ii cc ssttaattiicc
BB ii ll ll PP uu gg hh SS ii nn gg ll ee tt oo nn
Approach 5 - Enum (Most Optimal):

jav
a
eennuumm
EEnnuummSSiinn
gglleettoonn {{
IINNSSTTAANNCC
EE;;

pp uu bb ll ii cc vv oo ii dd doSomething(()) {{
// Business logic
}}
}}

34.Custom Exception class creation (checked/unchecked)


Question: Create custom exception classes.

Approach 1 - Checked Exception:

java
// Checked Exception - must be declared in method signature
ccllaassss
IInnssuuffffiicciieennttFFuunnddssEExxcceepptt
iioonn eexxtteennddss EExxcceeppttiioonn {{
pp rr ii vv aa tt ee ddoouubbllee aammoouunntt;;

ppuubblliicc
IInnssuuffffiicciieennttFFuunnddssEExxcceep
pttiioonn((ddoouubbllee aammoouunntt)) {{
ssuuppeerr((""IInnssuuffffiicciieenntt
ff uu nn dd ss :: "" + aammoouunntt));;
tthhiiss..aammoouunntt = aammoouunntt;;
}}

ppuubblliicc
IInnssuuffffiicciieennttFFuunnddssEExxcceeppttiioonn(Sttrrii
nngg mmeessssaaggee,, ddoouubbllee aammoouunntt)) {{
ssuuppeerr((mmeessssaaggee));;
tthhiiss..aammoouunntt = aammoouunntt;;
}}

pp uu bb ll ii cc
ddoouubbllee
getAmount(
getAmount ()) {{
rr ee tt uu rr nn
aammoouunntt;;
}}
}}

// Usage:
cc ll aa ss ss
BBaannkkAAccccoou
unntt {{
pprriivvaattee
ddoouubbllee
bbaallaannccee;;

ppuubblliicc vvooiidd withdraw(


withdraw (ddoouubbllee aammoouunntt))
tthhrroowwss
IInnssuuffffiicciieennttFFuunnddssEExxcceeppttiioonn {{ iiff
((aammoouunntt > bb aa ll aa nn cc ee )) {{
tthhrrooww nneeww IInnssuuffffiicciieennttFFuunnddssEExxcceeppttiioonn((aammoouunntt));;
}}
bbaallaannccee -= aammoouunntt;;
}}
}}

Approach 2 - Unchecked Exception (Optimal for runtime errors):

jav
a
// Unchecked Exception - extends RuntimeException
ccllaassss
IInnvvaalliiddAAggeeEExxcceeppttiioonn
eexxtteennddss
RRuunnttiimmeeEExxcceeppttiioonn {{
pp rr ii vv aa tt ee iinntt aa gg ee ;;

ppuubblliicc
IInnvvaalliiddAAggeeEExxcceep
pttiioonn((iinntt aaggee)) {{
ssuuppeerr((""IInnvvaalliidd
aa ggee:: "" + aaggee));;
tt hh ii ss .. aa gg ee = aa gg ee ;;
}}

ppuubblliicc
IInnvvaalliiddAAggeeEExxcceeppttiioonn((Sttr
riinngg mmeessssaaggee,, iinntt aaggee)) {{
ssuuppeerr((mmeessssaaggee));;
tthhiiss..aaggee = aa ggee;;
}}

ppuubblliicc
IInnvvaalliiddAAggeeEExxcceeppttiioonn((Sttrriinngg
mmeessssaaggee,, TThhrroowwaabbllee ccaauussee,, iinntt
aaggee)) {{ ssuuppeerr((mmeessssaaggee,,
cc aa uu ss ee )) ;;
tthhiiss..aaggee = aa ggee;;
}}

pp uu bb ll ii cc
iinntt getAge(
getAge ())
{{ rr ee tt uu rr nn
aa gg ee ;;
}}
}}

// Usage:
cc ll aa ss ss
PPeerrssoon
n {{
pprriivvaatte
e iinntt
aaggee;;

pp uu bb ll ii cc vv oo ii dd
setAge(
setAge (iinntt aaggee))
{{ iiff ((age
age < 00 ||
aaggee > 115500))
{{
tthhrrooww nneeww IInnvvaalliiddAAggeeEExxcceeppttiioonn((aaggee));;
}}
tthhiiss..aaggee = aa ggee;;
}}
}}

35.Polymorphism runtime code with classes


Question: Demonstrate runtime polymorphism.

Approach - Method Overriding:

jav
a
// Base class
aa bb ss tt rr aa cc tt
ccllaassss
AAnniimmaall {{
pprrootteecctteedd
SSttrriinngg
nnaammee;;

ppuubblliicc
AAnniimmaall((SSttrriin
ngg nnaammee)) {{
tt hh ii ss .. nn aa mm ee =
nnaammee;;
}}

// Abstract method - must be overridden


ppuubblliicc aabbssttrraacctt vvooiidd makeSound(
makeSound ());;

// Concrete method - can be overridden


pp uu bb ll ii cc vv oo ii dd sleep(
sleep ()) {{
SSyysstteemm.out. .out .println(
println (nnaammee + "" iiss sslleeeeppiinngg"" ));;
}}
}}

// Derived classes
cc ll aa ss ss DDoogg
eexxtteennddss
AAnniimmaall {{
ppuubblliicc
DDoogg((SSttrriinngg
nnaammee)) {{
ssuuppeerr((nnaammee));;
}}

@@OOvveerrrriiddee
pp uu bb ll ii cc vv oo ii dd makeSound(
makeSound ()) {{
SSyysstteemm.out. .out .println(
println (nnaammee + "" ssaayyss:: WWoo oo ff !! "" )) ;;
}}

@@OOvveerrrriiddee
pp uu bb ll ii cc vv oo ii dd sleep(
sleep ()) {{
SSyysstteemm.out. .out .println(
println (nnaammee + "" iiss sleeping ii nn tthhee ddoogghhoouussee""));;
}}
}}

cc ll aa ss ss CCaatt
eexxtteennddss
AAnniimmaall {{
ppuubblliicc
CCaatt((SSttrriinngg
nnaammee)) {{
ssuuppeerr((nnaammee));;
}}
@@OOvveerrrriiddee
pp uu bb ll ii cc vv oo ii dd makeSound(
makeSound ()) {{
SSyysstteemm.out. .out .println(
println (nnaammee + "" ssaayyss:: MMeeooww!!""));;
}}
}}

ccllaassss BBiirrdd eexxtteennddss AAnniimmaall {{


ppuubblliicc
BBiirrdd((SSttrriinngg
nnaammee)) {{
ssuuppeerr((nnaammee
)); ;
}}

@@OOvveerrrriiddee
pp uu bb ll ii cc vv oo ii dd makeSound(
makeSound ()) {{
SSyysstteemm.out .out..println
println((nnaammee + "" ssaayyss:: TTww ee ee tt !! "" )) ;;
}}

ppuubblliicc vv oo ii dd fly(
fly ()) {{
SSyysstteemm.out
.out..println
println((nnaammee + "" iiss ffllyyiinngg""));;
}}
}}

// Demonstration
pp uu bb ll ii cc cc ll aa ss ss
PPoollyymmoorrpphhiissmmDDee
mmoo {{ pp uu bb ll ii cc
ssttaattiicc void
main(
main (SSttrriinngg[[]] aa rr gg ss ))
{{
// Runtime polymorphism
AAnniimmaall aanniimmaall11 =
nneeww
DDoogg((""BBuuddddyy""));;
AAnniimmaall aanniimmaall22 =
nneeww
CCaatt((""WWhhiisskkeerrss""));;
AAnniimmaall aanniimmaall33 =
nneeww
BBiirrdd((""TTwweeeettyy""));;

// Method calls resolved at runtime


aanniimmaall11..m m // Woof!
akeSound(
akeSound ());; // Meow!
aanniimmaall22..m m // Tweet!
akeSound(
akeSound ());;
aanniimmaall33..m m
akeSound(
akeSound ());;

aanniimmaall // Custom Dog sleep


11..sleep
sleep(());; // Default Animal sleep
aanniimmaall
22..sleep
sleep(());;

// Array of animals
AAnniimmaall[[]]
aanniimmaallss
= {{ nneeww
DDoogg((""MM
aaxx"")),,
nneeww
CCaatt((""LLu
unna a " " ) ) , ,
nneeww
BBiirrdd((""PP
oollllyy""))
}};;

ffoorr ((AAnniimmaall
aanniimmaall :
aanniimmaallss)) {{
aa nniimm aa ll..makeSo
makeSo
und( )
und ( ) ;;
aa nn ii mm aa ll ..sleep
sleep(( )
) ;;
}}

// Downcasting when
needed iiff
((aanniimmaall33
iinnssttaanncceeooff
BBiirrdd)) {{ BBiirrdd
bbiirrdd = ((BBiirrdd))
aa nn ii mm aa ll 33 ;;
bb ii rr dd ..fly
fly(( )) ;;
}}
}
} }
}

36.Stream API nested mapping (List<List<Employee>>)


Question: Work with nested employee structures using Stream API.

Approach - FlatMap with Nested Objects:

java
cc ll aa ss ss
EEmmppllooyyee
ee {{
pprriivvaattee
SSttrriinngg
nnaammee;;
pprriivvaattee SSttrriinngg
ddeeppaarrttmmeenntt;;
pp rr ii vv aa tt ee
ddoouubbllee
ssaallaarryy;;
pprriivvaattee
SSttrriinngg
llooccaattiioonn;;

ppuubblliicc EEmmppllooyyeeee((Sttrriinngg
nnaammee,, SSttrriinngg
ddeeppaarrttmmeenntt,, ddoouubbllee
ssaallaarryy,, SSttrriinngg
llooccaattiioonn)) {{
tt hh ii ss .. nn aa mm ee =
nnaammee;;
tthhiiss..ddeeppaarrttmmee
nntt =
ddeeppaarrttmmeenntt;;
tthhiiss..ssaallaarryy =
ssaallaarryy;;
tthhiiss..llooccaattiioonn =
llooccaattiioonn;;
}}

// Getters
pp uu bb ll ii cc SString
tring getName(
getName ()) {{ rr ee tt uu rr nn nnaammee;; }}
pp uu bb ll ii cc SString
tring getDepartment(
getDepartment ()) {{
rr ee tt uu rr nn ddeeppaarrttmmeenntt;; }}
pp uu bb ll ii cc ddoouubbllee getSalary(
getSalary ()) {{
rr ee tt uu rr nn ss aa ll aa rr yy ;; }}
pp uu bb ll ii cc SString
tring getLocation(
getLocation ()) {{ rr ee tt uu rr nn ll oo cc aa tt ii oo nn ;; }}
}}

ccllaassss NNeesstteeddEEmmppllooyyeeeeOOppeerraattiioonnss {{

// Flatten nested list of employees


pp uu bb ll ii cc LLiisstt<
<Employee>
Employee >
flattenEmployees(
flattenEmployees (LLiisstt<<LLiisstt<<Employee
Employee>>>>
nneesstteeddEEmmppllooyyeeeess)) {{ rr ee tt uu rr nn
nneesstteeddEEmmppllooyyeeeess..stream
stream(())
..flatMap
flatMap((LLiisstt::stream
::stream))
..collect
collect((CCoolllleeccttoorrss..toList
toList(())));;
}}

// Get all employee names from nested structure


pp uu bb ll ii cc LLiisstt<
<Sttrriinngg>>
getAllEmployeeNames(
getAllEmployeeNames (LLiisstt<<List
List<
<EEmmppllooyyeeee>>>>
nneesstteeddEEmmppllooyyeeeess)) {{ rr ee tt uu rr nn
nneesstteeddEEmmppllooyyeeeess..stream
stream(())
..flatMap
flatMap((LLiisstt::stream
::stream))
..map
map((EEmmppllooyyeeee::getName
::getName))
..collect
collect((CCoolllleeccttoorrss..toList
toList(())));;
}}

// Get employees with salary > threshold from nested list


ppuubblliicc LLiisstt<<EEmmppllooyyeeee>> getHighSalaryEmployees(
getHighSalaryEmployees (
LLiisstt<<List
List<
<EEmmppllooyyeeee>>>>
nneesstteeddEEmmppllooyyeeeess,, ddoouubbllee
tthhrreesshhoolldd)) {{ rr ee tt uu rr nn
nneesstteeddEEmmppllooyyeeeess..stream stream(())
..flatMap
flatMap((LLiisstt::stream
::stream))
..filter
filter(emp
(emp -> ee mm pp ..getSalary
getSalary(( )) > tt hh rr ee ss hh oo ll dd ))
..collect
collect((CCoolllleeccttoorrss..toList
toList(())));;
}}
// Group by department from nested list
pp uu bb ll ii cc MM aa pp <Stt rr ii nn gg ,,
LLiisstt<<EEmmppllooyyeeee>>>>
groupByDepartment(( LLiisstt<<LLiisstt<<EEmmpp
llooyyeeee>>>>
nneesstteeddEEmmppllooyyeeeess)) {{
rreettuurrnn
nneesstteeddEE mm pplloo yyeeeess.. stream(())
..flatMap((LLiisstt::stream))
..collect(Collectors..groupingBy((EEmmppllooyyeee
e::getDepartment))));;
}}

// Get average salary by department


pp uu bb ll ii cc MMaapp<<SSttrriinngg,,
DDoouubbllee>> averageSalaryByDept((
LLiisstt<<LLiisstt<<EEmmppllooyyeeee>>>>
nneesstteeddEEmmppllooyyeeeess)) {{
rreettuurrnn
nneesstteeddEE mm pplloo yyeeeess.. stream(())
..flatMap((LLiisstt::stream))
}
}

37.Find employees based on property (e.g. location) using Stream


Question: Filter and find employees based on various properties.

Approach - Stream Filtering and Operations:

jav
a
ccllaassss EEmmppllooyyeeeeOOppeerraattiioonnss {{

// Find employees by location


pp uu bb ll ii cc LLiisstt<
<Employee>
Employee > findByLocation(
findByLocation (LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess,,
SSttrriinngg
llooccaattiioonn)) {{ rr ee tt uu rr nn
eemmppllooyyeeeess..stream stream(())
..filter
filter(emp
(emp -> eemmpp..getLocation
getLocation(())..equals
equals((llooccaattiioonn))))
..collect
collect((CCoolllleeccttoorrss..toList
toList(())));;
}}

// Find employees by department


pp uu bb ll ii cc LLiisstt<
<Employee>
Employee > findByDepartment(
findByDepartment (LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess,,
SSttrriinngg
ddeeppaarrttmmeenntt)) {{
rr ee tt uu rr nn
eemmppllooyyeeeess..stream stream(())
..filter
filter(emp
(emp -> eemmpp..getDepartment
getDepartment(())..equals
equals((ddeeppaarrttmmeenntt))))
..collect
collect((CCoolllleeccttoorrss..toList
toList(())));;
}}

// Find employees with salary in range


pp uu bb ll ii cc LLiisstt<
<Employee>
Employee > findBySalaryRange(
findBySalaryRange (LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess,,
ddoouubbllee mmiinn,,
ddoouubbllee mmaaxx)) {{ rr ee tt uu rr nn
eemmppllooyyeeeess..stream stream(())
..filter
filter(emp
(emp -> eemm pp..getSalary
getSalary()() >= min && ee mm pp ..getSalary
getSalary(( )) <= mmaaxx))
..collect
collect((CCoolllleeccttoorrss..toList
toList(())));;
}}

// Group employees by location


pp uu bb ll ii cc MM aa pp < Stt rr ii nn gg ,,
LLiisstt<<EEmmppllooyyeeee>>>> groupByLocation(
groupByLocation (
LLiisstt<<EEmmppllooyyeeee>> eemmppllooyyeeeess))
{{
rreettuurrnn eemmppllooyyeeeess..stream
stream(())
..collect
collect((Collectors. groupingBy((EEmmppllooyyeeee::getLocation
Collectors .groupingBy ::getLocation))));;
}}

// Count employees by location


pp uu bb ll ii cc MMaapp<
<Sttrriinngg,, LLoonngg>>
countByLocation(
countByLocation (LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess)) {{ rr ee tt uu rr nn
eemmppllooyyeeeess..stream
stream(())
..collect
collect((CCoolllleeccttoorrss..groupingBy
groupingBy(
( EE mm pplloo yyeeee::getLocation
::getLocation,,
CCoolllleeccttoorrss..counting
counting(())
)))); ;
}}
// Get highest paid employee by location
pp uu bb ll ii cc MM aa pp < S tt rr ii nn gg ,,
OOppttiioonnaall<<EEmmppllooyyeeee>>>>
highestPaidByLocation(
highestPaidByLocation ( LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess)) {{
rreettuurrnn eemmppllooyyeeeess..stream
stream(())
..collect(
collect (CCoolllleeccttoorrss..groupingBy(
groupingBy
E m p l o
( E m pl o y e ey e e ::getLocation,
::getLocation ,
CCoolllleeccttoorrss..maxBy(
maxBy(CCoommppaarraattoorr..comparingDouble(
comparingDouble (EEmmppllooyyeee
e::getSalary)
::getSalary )))
)))); ;
}}

// Get employees with multiple filters


pp uu bb ll ii cc
LLiisstt<<EEmmppllooyyeeee>>
findEmployeesMultipleFilters(
findEmployeesMultipleFilters ( LLiisstt<<EEm
mppllooyyeeee>> eemmppllooyyeeeess,,
SStt rr ii nn gg
llooccaattiioonn,
, SSttrriinngg
ddeeppaarrttmm
eenntt,,
ddoouubbllee
mmiinnSSaallaar
ryy)) {{
rreettuurrnn eemmppllooyyeeeess..stream( stream ())
..filter(emp
filter(emp -> eemmpp..getLocation(
getLocation ())..equals(
equals (llooccaattiioonn))))
..filter(emp
filter(emp -> eemmpp..getDepartment(
getDepartment ())..equals(
equals (ddeeppaarrttmmeenntt))))
..filter(emp
filter(emp -> ee mm pp .. getSalary(
getSalary ( )) >= mm ii nn SS aa ll aa rr yy ))
..collect(
collect (CCoolllleeccttoorrss..toList(
toList ())));;
}}

// Get top N employees by salary


pp uu bb ll ii cc LLiisstt<Employee>
Employee >
getT
get opNBySalary ( L isstt<<Employee>
T opNBySalary( L i Employee> eemmppllooyyeeeess,, ii nn tt
nn )) {{ rr ee tt uu rr nn eemmppllooyyeeeess..stream(
stream ())
..sorted(
sorted(Comparator.
Comparator .comparingDouble(
comparingDouble (EEmmppllooyyeeee::getSalary)
::getSalary )..reversed(
reversed ())))
.. limit(
limit ( nn ))
..collect(
collect (CCoolllleeccttoorrss..toList(
toList ())));;
}}
}}

Sample SQL Queries


38.Print Nth highest salary
Question: Find the Nth highest salary from Employee table.

Approach 1 - Using LIMIT and OFFSET:

sq
l
-- For 2nd highest salary (N=2)
SSEELLEECCTT
DDIISSTTIINNCCTT
ssaallaarryy
FFRROOMM
EEmmppllooyyeeee
OORRDDEERR BBYY
ssaa llaa rryy
DDEESSCC
LLIIMMIITT 11
OOFFFFSSEETT 11 ;;

-- Generic for Nth highest (N-1 for OFFSET)


SSEELLEECCTT
Approach 2 - Using Subquery (Correlated):

sql

-- For 2nd highest


salary SSEELLEECCTT
MAX(( ss aa ll aa rr yy ))
FFRROOMM
EEmmppllooyyeeee
WWHHEERREE ssaa llaa rryy < (SSEELLEECCTT MAX((ssaallaarryy)) FFRROOMM
EEmmppllooyyeeee));;

-- For Nth highest salary


SSEELLEECCTT
ss aa ll aa rr yy
FFRROOMM
EEmmppllooyyee
ee ee11
W W HHE E RRE E
(( NN -11 )) = ((
Approach 3 - Using DENSE_RANK (Optimal):

sq
l
-- For Nth highest salary
SSEELLEEC
CTT
ssaallaarry
y
FFRROOMM
((
SSEELLEECCTT ssaa llaa rryy, DENSE_RANK(()) OOVVEERR
((OORRDDEERR BBY ss aa ll aa rr yy DDEESSCC)) aa ss rraannkk
FFRROOMM EEmmppllooyyeeee
)) rraannkkeedd
WWHHEERREE rraannkk = NN;;

-- Example for 3rd highest


SSEELLEEC
CTT
ssaallaarry
y

39.Inner Join/Left Join/Group By/Order By


Question: Demonstrate various SQL joins and operations.

Approach - Different Join Types:

sq
l
-- Sample Tables
CCRREEAATTEE
TTAABBLLEE
EEmmppllooyyeeee ((
eemmpp iidd IINNTT
PPRRIIMMAARRYY
KKEEYY,,
eemmpp nnaammee VVAARRCCHHAARR((110000)),,
ddeepptt iidd
IINNTT,,
ssaallaarryy DDEECCIIMMAALL((1100,,22))
)); ;

CCRREEAATTEE
TTAABBLLEE
DDeeppaarrttmmeennt
t (( ddeepptt iidd
IINNTT
PPRRIIMMAARRYY
KK EE YY ,, ddeepptt
nnaammee
V V A A R R C C H H A A R R ((1 1
0 0 0 0 )), ,
ll oo cc aa tt ii oo nn
V V A A R R C C H H A A R R ((1 1
0 0 0 0 ))
)); ;

-- INNER JOIN: Returns matching records from both


tables SSEELLEECCTT ee.emp .emp_name
name,,
ee..ssaallaarryy,, dd .. dd ee pp tt nnaammee,,
dd .. ll oo cc aa tt ii oo nn FFRROOMM EEmmppllooyyeeee
ee
IINNNNEERR JJOOIINN Department d OONN ee .. dd ee pp tt ii dd = dd .. dd ee pp tt iidd;;

-- LEFT JOIN: Returns all records from left table, matching from right
SSEELLEECCTT ee.emp .emp_name
name,, ee..ssaallaarryy,,
dd .. dd ee pp tt nnaammee,, dd..llooccaattiioonn
FFRROOMM EEmmppllooyyeeee ee
LLEEFFTT JJOOIINN Department d OONN ee .. dd ee pp tt ii dd = dd .. dd ee pp tt iidd;;

-- RIGHT JOIN: Returns all records from right table, matching from left
SSEELLEECCTT ee.emp .emp_name
name,, ee..ssaallaarryy,,
dd .. dd ee pp tt nnaammee,, dd..llooccaattiioonn
FFRROOMM EEmmppllooyyeeee ee
RRIIGGHHTT JJOOIINN Department d OONN ee .. dd ee pp tt ii dd = dd .. dd ee pp tt iidd;;

-- GROUP BY: Aggregate data


SSEELLEECCTT dd.dept
.dept_name
name,, COUNT(
OUNT (ee..eemmpp ii dd ))
aa ss eemmppllooyyeeee ccoouunntt,,
AVG((ee..ssaallaarryy)) aa ss aavvgg ss aa ll aa rr yy
FFRROOMM EEmmppllooyyeeee ee
IINNNNEERR JJOOIINN Department d OONN
ee .. dd ee pp tt ii dd = dd .. dd ee pp tt ii dd
GGRROOUUPP BBYY dd .. dd ee pp tt nnaammee;;

-- ORDER BY: Sort


results SSEELLEECCTT
eemmpp nnaammee,,
ssaallaarryy
FFRROOMM
EEmmppllooyyeeee
OORRDDEERR BBYY ssaallaarryy DDEESSCC;;

-- Combining JOIN, GROUP BY, HAVING, ORDER BY


SSEELLEECCTT dd.dept.dept_name
name,,
COUNT(
OUNT (ee..eemmpp ii dd )) aa ss eemmpp
ccoouunntt,, AVG((ee..ssaallaarryy)) aa ss
aavvgg ss aa ll aa rr yy
FFRROOMM EEmmppllooyyeeee ee
IINNNNEERR JJOOIINN Department d OONN ee .. dd ee pp tt ii dd = dd .. dd ee pp tt ii dd
GGRROOUUPP BBYY
dd .. dd ee pp tt nnaammee
HHAAVVIINNGG
COUNT((ee..eemmpp iidd)) >
55 OORRDDEERR BBYY aavvgg

40.Employee & department join to print properties


Question: Join employee and department tables to display combined information.

Approach - Various Join Queries:

sql
-- Basic join with all properties
SSEELLEECCTT ee.emp .emp_idid,,
ee..eemmpp nnaammee,,
ee .. ss aa ll aa rr yy ,, dd .. dd ee pp tt
nnaammee,, dd..llooccaattiioonn
FFRROOMM EEmmppllooyyeeee ee
IINNNNEERR JJOOIINN Department d OONN ee .. dd ee pp tt ii dd = dd .. dd ee pp tt iidd;;

-- Join with filtering


SSEELLEECCTT ee.emp .emp_name
name,,
ee..ssaallaarryy,, dd .. dd ee pp tt
nnaammee FFRROOMM
EEmmppllooyyeeee ee
IINNNNEERR JJOOIINN Department d OONN
ee .. dd ee pp tt ii dd = dd .. dd ee pp tt ii dd
WWHHEERREE dd.location .location = ''NNeeww YYoo rr kk ''
AND ee .. ss aa ll aa rr yy > 5500000000;;

-- Join with aggregation


SSEELLEECCTT dd..ddeepptt nnaammee,,
COUNT(
OUNT (ee..eemmpp iidd)) aa ss
ttoottaall eemmppllooyyeeeess,,
SUM(
SUM (ee..ssaallaarryy)) aa ss
ttoo ttaa ll ssaallaarryy,,
AVG(ee..ssaallaarryy)) aa ss
aavvgg ss aa ll aa rr yy ,,
MAX(
MAX (ee..ssaallaarryy)) aa ss
mmaaxx ss aa ll aa rr yy ,,
MIN(
MIN (ee..ssaallaarryy)) aa ss
mmiinn ss aa ll aa rr yy
FFRROOMM EEmmppllooyyeeee ee
IINNNNEERR JJOOIINN Department d OONN
ee .. dd ee pp tt ii dd = dd .. dd ee pp tt ii dd
GGRROOUUPP BBYY dd .. dd ee pp tt nnaammee;;

-- Join with multiple conditions


SSEELLEECCTT ee.emp .emp_namename,, ee..ssaallaarryy,,
dd .. dd ee pp tt nnaammee,, dd..llooccaattiioonn
FFRROOMM EEmmppllooyyeeee ee
IINNNNEERR JJOOIINN
DDeeppaarrttmmeenn
tt dd OONN
ee..ddeepptt iidd =
dd..ddeepptt iidd
AND dd .. ll oo cc aa tt ii oo nn = ''CCaalliiffoorrnniiaa''
WWHHEERREE ee .. ss aa ll aa rr yy BETWEEN 4400000000 AND 8800000000
OORRDDEERR BBYY ee..ssaallaarryy DDEESSCC;;

-- Self join to find employees in same department


SSEELLEECCTT ee11..eemmpp
nnaammee aass
EEmmppllooyyeeee11,,
ee22..eemmpp nnaammee
aa ss
EEmmppllooyyeeee22,,
dd .. dd ee pp tt nnaammee
FFRROOMM EEmmppllooyyeeee ee11
IINNNNEERR JJOOIINN Employee e2 OONN ee 11 .. dd ee pp tt ii dd = e2.dept_id
e2.dept id
AND ee11..eemmpp ii dd < ee22..eemmpp ii dd IINNNNEERR JJOOIINN
Department d OONN ee 11 .. dd ee pp tt ii dd = dd .. dd ee pp tt iidd;;

41. Pagination query (limit/offset)


Question: Implement pagination in SQL queries.

Approach - LIMIT and OFFSET:


sql
-- Basic pagination (Page 1, 10 records per page)
SSEELLEECCTT eemmpp iidd,,
eemmpp nnaammee,,
ssaallaarryy FFRROOMM
EEmmppllooyyeeee
OORRDDEERR BBYY eemmpp ii dd
LLIIMMIITT 1100 OOFFFFSSEETT 00 ;;

-- Page 2, 10 records per page


SSEELLEECCTT eemmpp iidd,,
eemmpp nnaammee,,
ssaallaarryy FFRROOMM
EEmmppllooyyeeee
OORRDDEERR
BBYY eemmpp
ii dd LLIIMMIITT
1100
OOFFFFSSEETT
1100;;

-- Generic formula: OFFSET = (page_number - 1) * page_size


-- For page N with page_size
P: SSEELLEECCTT eemmpp
iidd,, eemmpp nnaammee,,
ssaallaarryy FFRROOMM
EEmmppllooyyeeee
OORRDDEERR BBYY
eemmpp ii dd
LLIIMMIITT PP OFFSET
( NN--11 ))*
* PP ;;

-- Example: Page 3, 20 records per


page SSEELLEECCTT eemmpp iidd,,
eemmpp nnaammee,, ss aa ll aa rr yy
FFRROOMM EEmmppllooyyeeee
OORRDDEERR
BBYY eemmpp
ii dd LLIIMMIITT
2200
OOFFFFSSEETT
4400;;

-- With filtering and pagination


SSEELLEECCTT eemmpp iidd,,
eemmpp nnaammee,, ssaallaarryy,,
ddeepptt iidd FFRROOMM
EEmmppllooyyeeee
W W HHE E RRE E
ssaallaarryy >
5500000000
OORRDDEERR BBYY
s s aa l l aa rr yy
D D E E S S CC
LLIIMMIITT 1100
OOFFFFSSEETT
00 ;;

-- Count total records (for pagination info)


SSEELLEECCTT COUNT( *))
COUNT (*
aa ss tt oo tt aa ll
rreeccoorrddss FFRROOMM
EEmmppllooyyeeee
WWHHEERREE ssaallaarryy > 5500000000;;

-- Complete pagination with metadata


SSEELLEECCTT
eemmpp
ii dd ,,
eemmpp
nna a m m e
e,,
ss aa ll aa rr
yy ,,
((SSEELLEECCTT COUNT(
COUNT (* *)) FFRROOMM EEmmppllooyyeeee
WWHHEERREE salary > 5500000000)) aa ss tt oo tt aa ll ccoouunntt
FFRROOMM EEmmppllooyyeeee
WWHHEERREE ssaallaarryy > 5500000000
OORRDDEERR
BBYY ssaallaarryy
DDEESSCC
LLIIMMIITT 1100

42.Frequency-based queries (count/groupBy/having)


Question: Count frequencies and filter based on count.

Approach - GROUP BY with HAVING:

sql
-- Count employees per department
SSEELLEECCTT ddeepptt ii dd ,, COUNT( *))
COUNT (*
aa ss eemmppllooyyeeee ccoouunntt
FFRROOMM EEmmppllooyyeeee
GGRROOUUPP BBYY ddeepptt ii dd ;;

-- Find departments with more than 5


employees SSEELLEECCTT ddeepptt ii dd ,,
COUNT(
COUNT (* *)) aa ss eemmppllooyyeeee
ccoouunntt FFRROOMM EEmmppllooyyeeee
GGRROOUUPP BBYY
ddeepptt ii dd
HHAAVVIINNGG
COUNT(
COUNT (* *)) > 55 ;;

-- Count salary frequency


SSEELLEECCTT ss aa ll aa rr yy ,,
COUNT(
COUNT (**)) aa ss
ffrreeqquueennccyy FFRROOMM
EEmmppllooyyeeee
GGRROOUUPP BBYY ss aa ll aa rr yy
OORRDDEERR BBYY ffrreeqquueennccyy DDEESSCC;;

-- Find salaries that appear more than once (duplicates)


SSEELLEECCTT ss aa ll aa rr yy ,,
COUNT(
COUNT (* *)) aa ss
ffrreeqquueennccyy FFRROOMM
EEmmppllooyyeeee
GGRROOUUPP BBYY
ss aa ll aa rr yy
HHAAVVIINNGG
COUNT(
COUNT (* *)) > 11 ;;

-- Find most common salary


SSEELLEECCTT ss aa ll aa rr yy ,,
COUNT(
COUNT (**)) aa ss
ffrreeqquueennccyy FFRROOMM
EEmmppllooyyeeee
GGRROOUUPP BBYY ss aa ll aa rr yy
OORRDDEERR BBYY
ffrreeqquueennccyy
DDEESSCC LLIIMMIITT
11 ;;

-- Count employees by location (with join)


SSEELLEECCTT dd.location
.location,, COUNT(
OUNT (ee..eemmpp
ii dd )) aa ss eemmppllooyyeeee ccoouunntt
FFRROOMM EEmmppllooyyeeee ee
IINNNNEERR JJOOIINN Department d OONN
ee .. dd ee pp tt ii dd = dd .. dd ee pp tt ii dd
GGRROOUUPP BBYY dd .. ll oo cc aa tt ii oo nn
HHAAVVIINNGG COUNT( OUNT (ee..eemmpp iidd)) >= 1100
OORRDDEERR BBYY eemmppllooyyeeee ccoouunntt DDEESSCC;;

-- Multiple grouping
SSEELLEECCTT dd.dept .dept_name
name,, dd .. ll oo cc aa tt ii oo nn ,,
COUNT(
OUNT(ee..eemmpp iidd)) aa ss eemmpp ccoouunntt
FFRROOMM EEmmppllooyyeeee ee
IINNNNEERR JJOOIINN Department d OONN
ee .. dd ee pp tt ii dd = dd .. dd ee pp tt ii dd
GGRROOUUPP BY dd .. dd ee pp tt nnaammee,,
dd..llooccaattiioonn
HHAAVVIINNGG COUNT(
OUNT (ee..eemmpp iidd)) > 33;;

-- Find employees with same name (frequency > 1)


SSEELLEECCTT eemmpp nnaammee,,
COUNT((*)) aa ss nnaammee ccoouunntt
FFRROOMM EEmmppllooyyeeee
GGRROOUUPP BBYY
eemmpp
nnaammee

Additional Coding Questions


43.Print max/min frequency element
Question: Find element with maximum and minimum frequency in array.

Approach 1 - HashMap (Normal Method):

java
pp uu bb ll ii cc vv oo ii dd
printMaxMinFrequency(
printMaxMinFrequency (iinntt[[]] aa rr rr )) {{
MMaapp<<Integer Integer,, IInntteeggeerr>>
ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());;

// Count frequencies
ffoorr ((iinntt nnuumm : aarrrr)) {{
ff rr ee qq MM aa pp ..put
put((nn uu mm ,, ffrreeqqMMaapp..getOrDefault
getOrDefault((num,
num, 00 )) + 11));;
}}

iinntt mmaaxxFFrreeqq =
IInntteeggeerr..MMIINN
V V A A LLU U E E ; ; iinntt
mmiinnFFrreeqq =
IInntteeggeerr..MMAAXX
V V A A LLU U E E ; ; ii nn tt
mmaaxxEElleemmeenntt =
aa rr rr [[ 00 ]] ;;
iinntt mmiinnEElleemmeenntt = aarrrr[[00]];;

// Find max and min frequency elements


ffoorr ((Map
Map..EEnnttrryy<<IInntteeggeerr,,
IInntteeggeerr> > entry :
ffrreeqqMMaapp..entrySetentrySet(()))) {{ iiff
((entry.
entry.getValue
getValue(()) > mmaaxxFFrreeqq)) {{
mmaaxxFFrreeqq =
ee nn tt rr yy ..get
getV
Value(
alue ( )) ;
;
mmaaxxEElleemmeenntt
= eennttrryy..get getKKey(
ey ());;
}}
iiff ((entry.
entry.getValue
getValue(()) <
mmiinnFFrreeqq)) {{
mmiinnFFrreeqq =
ee nn tt rr yy ..get
getV
Value(
alue ( )) ;
; mmiinnEElleemmeenntt
=
eennttrryy..get getK
Key(
ey ());;
}}
}}

SSyysstteemm.out .out..println
println((""MMaaxx
ffrreeqquueennccyy ee ll ee mm ee nn tt :: "" +
mmaaxxEElleemmeenntt + ""
(( ff rr ee qq uu ee nn cc yy :: "" +
mmaaxxFFrreeqq + ""))""));;
SSyysstteemm.out
.out..println
println((""MMiinn ffrreeqquueennccyy ee ll ee mm ee nn tt :: "" +
mmiinnEElleemmeenntt +
"" ((ffrreeqquueennccyy:: "" + mmiinnFFrreeqq + ""))""));;
}}
// Time: O(n), Space: O(n)
Approach 2 - Stream API (Optimal):

jav
a
pp uu bb ll ii cc vv oo ii dd
printMaxMinFrequencyS
printMaxMinFrequencyStream( tream (iinntt[[]] aa rr rr ))
{{ MMaapp<<Integer, Integer, LLoonngg>>
ffrreeqqMMaapp =
AArrrraayyss..stream(
stream (aarrrr))
..boxed(
boxed ( ) )
..collect(
collect (CCoolllleeccttoorrss..grou
pingBy(
pingBy ( FFuunncc ttiioo nn.. iden
tity(
tity ()),,
CCoolllleeccttoorrss..counting(
counting ()
)
)))); ;

// Max frequency element


MMaapp..Entry<
Entry<IInntteeggeerr,, LLoonngg>> mmaaxxEEnnttrryy =
freqMap.entrySet
freqMap.entrySet(())..stream(
stream ())
..max(
max(Map.
Map .EEnnttrryy..comparingByV
comparingByValue(
alue ())))
.. orElse(
orElse ( nn uu ll ll )) ;;

// Min frequency element


MMaapp..Entry<
Entry<IInntteeggeerr,, LLoonngg>> mmiinnEEnnttrryy =
freqMap.entrySet
freqMap.entrySet(())..stream(
stream ())
..min(
min(Map.
Map .EEnnttrryy..comparingByV
comparingByValue(
alue ())))
.. orElse( n u l l
orElse ( n u l l ) ;) ;

iiff ((mmaaxxEEnnttrryy != nnuullll)) {{


SSyysstteemm.out. .out .println(
println (""MMaaxx
ff rr ee qq uu ee nn cc yy :: "" +
maxEntry.
maxEntry .getKey(
getKey ()) + "" (("" +
maxEntry.
maxEntry .getValue(
getValue ()) + ""
tt ii mm ee ss )) "" )) ;;
}}
iiff (( mm ii nn EE nn tt rr yy != nnuullll)) {{
SSyysstteemm.out. .out .println(
println (""MMiinn
ff rr ee qq uu ee nn cc yy :: "" +
minEntry.
minEntry .getKey(
getKey ()) + "" (("" +
minEntry.
minEntry .getValue(
getValue ()) + ""
tt ii mm ee ss )) "" )) ;;
}}
}}
// Time: O(n), Space: O(n)

44.Find kth largest without sorting


Question: Find kth largest element without sorting the entire array.

Approach 1 - Min Heap (Optimal):

jav
a
pp uu bb ll ii cc ii nn tt findKthLargestNoSort((iinntt[[]]
nnuummss,, ii nn tt kk )) {{
PPrriioorriittyyQQuueeuuee<<Integer>
mmiinnHHeeaapp = nneeww
PPrriioorriittyyQQuueeuuee<<>>(());;

ff oo rr (( ii nn tt
nnuum m :
nnuummss)) {{
mmiinnHHeeaapp
..offer((nnuumm))
;;
iiff ((minHeap.size(()) > kk )) {{
mm ii nn HH ee aa pp .. poll(( )) ;;
}}
}}
Approach 2 - QuickSelect (Most Optimal):

java
pp uu bb ll ii cc ii nn tt findK
findKthLargestQuickSelect(
thLargestQuickSelect (iinntt[[]] nnuummss,, ii nn tt kk )) {{
rr ee tt uu rr nn quickSelect(nums
quickSelect(nums,, 00 ,, nn uu mm ss .length - 1,, nnuummss..lleennggtthh - kk )) ;;
}}

pp rr ii vv aa tt ee ii nn tt quickSelect(
quickSelect(iinntt[[]]
nnuummss,, int left, ii nn tt rr ii gg hh tt ,, ii nn tt kk ))
{{ iiff ((left == rriigghhtt)) rr ee tt uu rr nn
nn uu mm ss [[ ll ee ff tt ]] ;;

RRaannddoomm rraannddoomm = nneeww RRaannddoomm(());;


iinntt pp ii vv oo tt II nn dd ee xx = left +
rraannddoomm..nextInt( nextInt (rriigghhtt - lleefftt +
11));; pp ii vv oo tt II nn dd ee xx =
partition(
partition(nnuummss,, lleefftt,, rriigghhtt,,
pp ii vv oo tt II nn dd ee xx )) ;;

iiff ((kk ==
ppiivvoottIInnd
deexx)) {{
rreettuurrnn
nn uu mm ss [[ kk ]
] ;;
}} eellssee iiff ((kk < ppiivvoottIInnddeexx)) {{
rr ee tt uu rr nn quickSelect(nums
quickSelect(nums,, lleefftt,, pp ii vv oo tt II nn dd ee xx - 11 ,, kk));;
}} eellssee {{
rr ee tt uu rr nn quickSelect(nums
quickSelect(nums,, pp ii vv oo tt II nn dd ee xx + 11 ,, rriigghhtt,, kk));;
}}
}}

pp rr ii vv aa tt ee iinntt partition(
partition(iinntt[[]] nnuummss,, int left,
iinntt rriigghhtt,, iinntt pp ii vv oo tt II nn dd ee xx )) {{
iinntt ppiivvoottVVaalluuee =
nnuumm ss[[ppiivvoo ttIInnddeexx]];;
swap(
swap (nnuummss,,
ppiivvoottIInnddeexx,,
rriigghhtt));; iinntt
ss tt oo rr ee II nn dd ee xx =
lleefftt;;

ff oo rr ((int i = lleefftt;; ii <


rr ii gg hh tt ;; ii++)
++ ) {{ iiff
((nums[i
nums[ i]] <
pp ii vv oo tt VVaa ll uu ee ))
{{
swap(
swap (nnuummss,,
ssttoorreeIInnddeexx,, ii));;
ss tt oo rr ee II nn dd ee xx ++;
++ ;
}}
}}
swap(
swap (nnuummss,,
rriigghhtt,,
ssttoorreeIInnddeexx));;
rreettuurrnn
ssttoorreeIInnddeexx;;
}}

pp rr ii vv aa tt ee vv oo ii dd
swap(
swap(iinntt[[]] nnuummss,, iinntt
ii,, iinntt jj)) {{ iinntt tteemmpp
= nn uu mm ss [[ ii ]] ;;
nnuummss[[ii]]
=
nnuummss[[jj]];
;
nn uu mm ss [[ jj ]
] = tteemmpp;;
}}
// Time: O(n) average, Space: O(1)
45.Find palindrome in string list
Question: Find all palindrome strings from a list.

Approach 1 - Traditional Loop (Normal Method):

java

pp uu bb ll ii cc LLiisstt<Sttrriinngg>>
findPalindromes((LLiisstt<<Sttrriinngg>>
ssttrriinnggss)) {{ LLiisstt<<String>>
ppaalliinnddrroommeess = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;

ffoorr ((SSttrriinngg
ssttrr :
ssttrriinnggss)) {{
iiff
((isPalindrome((ssttr
r)))) {{
ppaalliinnddrroommeess..add((ssttrr));;
}}
}}
rreettuurrnn pp aa ll ii nn dd rr oo mm ee ss ;;
}}

pp rr ii vv aa tt ee bboooolleeaann
isPalindrome((SSttrriinngg ss)) {{
ii nn tt ll ee ff tt = 0,, rr ii gg hh tt =
ss..length(()) - 11 ;; ww hh ii ll ee
((lleefftt < rriigghhtt)) {{
iiff ((s.charAt((lleefftt)) !=
ss..charAt((rriigghhtt)))) {{
rr ee tt uu rr nn ffaallssee;;
}}
Approach 2 - Stream API (Optimal):

jav
a
pp uu bb ll ii cc LL ii ss tt <Stt rr ii nn gg >>
findPalindromesStream((List<SSttrriinngg>>
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
ssttrriinnggss..stream(())
.. filter(( tt hh ii ss ::isPalindrome))
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}

pp rr ii vv aa tt ee bboooolleeaann isPalindrome((SSttrriinngg ss)) {{


SS tt rr ii nn gg reversed = nneeww
SSttrriinnggBBuuiillddeerr((s).reverse(())..toString(());;
rr ee tt uu rr nn ss..equals((rreevveerrsseedd));;
}}

// Alternative with functional approach


pp uu bb ll ii cc LL ii ss tt <Stt rr ii nn gg >>
findPalindromesStreamAlt((List<SSttrriinngg>>
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
ssttrriinnggss..stream(())
..filter(s -> ss.equals(new StringBuilder((ss)).reverse().toString(())))
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;

46.Sort string array with Stream API


Question: Sort an array of strings using Stream API.

Approach 1 - Natural Order:

java

pp uu bb ll ii cc SString[]]
sortStrings((SSttrriinngg[[]]
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
AArrrraayyss..stream((ssttrriinngg
ss))
..sorted(())
..toArray(Sttrriinngg[[]]::nneeww));;
}}
Approach 2 - Custom Comparators (Optimal):

jav
a
ppuubblliicc ccllaassss SSttrriinnggSSoorrttiinngg {{

// Sort alphabetically (ascending)


pp uu bb ll ii cc SString
tring[[]]
sortAscending(
sortAscending (SSttrriinngg[[]]
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
AArrrraayyss..stream stream((ssttrriinnggss))
..sorted
sorted(())
..toArray
toArray((Sttrriinngg[[]]::
::nneeww));;
}}

// Sort reverse alphabetically (descending)


pp uu bb ll ii cc SString
tring[[]]
sortDescending(
sortDescending (SSttrriinngg[[]]
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
AArrrraayyss..stream stream((ssttrriinnggss))
..sorted
sorted((CCoommppaarraattoorr..reverseOrder
reverseOrder(())))
..toArray
toArray((Sttrriinngg[[]]:: ::nneeww));;
}}

// Sort by length
pp uu bb ll ii cc SString
tring[[]]
sortByLength(
sortByLength (SSttrriinngg[[]]
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
AArrrraayyss..stream stream((ssttrriinnggss))
..sorted
sorted((Comparator. comparingInt((SSttrriinngg::length
Comparator .comparingInt ::length))))
..toArray
toArray((Sttrriinngg[[]]::
::nneeww));;
}}

// Sort by length (descending)


pp uu bb ll ii cc SString
tring[[]]
sortByLengthDesc(
sortByLengthDesc (SSttrriinngg[[]]
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
AArrrraayyss..stream stream((ssttrriinnggss))
..sorted
sorted((Comparator. comparingInt((SSttrriinngg::length
Comparator .comparingInt ::length))..reversed
reversed(())))
..toArray
toArray((Sttrriinngg[[]]::
::nneeww));;
}}

// Sort case-insensitive
case-insensitive
pp uu bb ll ii cc SString
tring[[]]
sortCaseInsensitive(
sortCaseInsensitive (SSttrriinngg[[]]
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
AArrrraayyss..stream stream((ssttrriinnggss))
..sorted
sorted((SSttrriinngg..CCAASSEE IINNSSEENNSSIITTIIVVEE OORRDDEERR))
..toArray
toArray((Sttrriinngg[[]]::
::nneeww));;
}}

// Sort by length, then alphabetically


pp uu bb ll ii cc SString
tring[[]]
sortByLengthThenAlpha(
sortByLengthThenAlpha (SSttrriinngg[[]]
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
AArrrraayyss..stream
stream((ssttrriinnggss))
..sorted
sorted((Comparator. comparingInt((SSttrriinngg::length
Comparator .comparingInt ::length))
..thenComparing
thenComparing((SSttrriinngg::compare
::compareT To))))
..toArray
toArray((Sttrriinngg[[]]::
::nneeww));;
}}
}}
47.Reverse a string using Java 8/Stream
Question: Reverse a string using modern Java features.

Approach 1 - StringBuilder (Normal Method):

java

pp uu bb ll ii cc SString reverseString((SSttrriinngg ssttrr)) {{


rreettuurrnn nneeww StringBuilder((ssttrr))..reverse(()).toString(());;
}}
// Time: O(n), Space: O(n)

Approach 2 - Stream API (Optimal for learning):

java

pp uu bb ll ii cc SString
reverseStringStream((SSttrriinngg ssttrr))
{{ rr ee tt uu rr nn ssttrr..chars(())
..mapToObj(cc -> (( cc hh aa rr )) cc))
..reduce("",, ((s, c) -> c + ss,, (s1, s2) -> ss22 + s1);;
}}

// Alternative using collect


pp uu bb ll ii cc SString
reverseStringStreamAlt((SSttrriinngg ssttrr))
{{ rr ee tt uu rr nn ssttrr..chars(())
..mapToObj(cc -> SSttrriinngg..valueOf(((cchhaarr)) cc))))
..collect((CCoolllleeccttoorrss..co
llectingAndThen(( CCoolllleecc
ttoorrss..toList(()),,
lliisstt -> {{
CCoolllleeccttiioonnss.
.reverse((lliisstt));;
rr ee tt uu rr nn
SString.join(("""",,
lliisstt));;
}}

Approach 3 - IntStream with StringBuilder:

jav
a
pp uu bb ll ii cc SString
reverseStringIntStream((SSttrriinngg ssttrr))
{{ rr ee tt uu rr nn
IInnttSStream.range((00,,
ssttrr..length(())))
..map(i -> ssttrr..charAt(str.length(()) - 11 - ii))))
.. collect(( SStt rr ii nn gg BB uu ii ll dd
ee rr ::nn ee ww ,,
SSttrriinnggBBuuiillddeerr::a
ppendCodePoint,,
SStt rr ii nn gg BB uu ii ll dd ee rr ::

48.Merge two tables in SQL


Question: Merge/combine data from two tables.

Approach - Various Merge Operations:

sql
-- UNION: Combine results, remove
duplicates SSEELLEECCTT eemmpp ii dd ,,
eemmpp nnaammee FFRROOMM
EEmmppllooyyeeee11 UUNNIIOONN
SSEELLEECCTT eemmpp iidd,, eemmpp nnaammee FFRROOMM EEmmppllooyyeeee22;;

-- UNION ALL: Combine results, keep


duplicates SSEELLEECCTT eemmpp ii dd ,,
eemmpp nnaammee FFRROOMM
EEmmppllooyyeeee11 UUNNIIOONN AALLLL
SSEELLEECCTT eemmpp iidd,, eemmpp nnaammee FFRROOMM EEmmppllooyyeeee22;;

-- MERGE using INSERT (MySQL/PostgreSQL)


IINNSSEERRTT INTO
EEmmppllooyyeeeeMMeerrggeedd ((eemmpp iidd,,
eemmpp nnaammee,, ss aa ll aa rr yy ))
SSEELLEECCTT eemmpp iidd,, eemmpp
nnaammee,, ss aa ll aa rr yy FFRROOMM
EEmmppllooyyeeee11 UUNNIIOONN
SSEELLEECCTT eemmpp iidd,, eemmpp nnaammee,, ssaallaarryy FFRROOMM
EEmmppllooyyeeee22;;

-- MERGE with UPDATE/INSERT (SQL Server style)


MMEERRGGEE IINNTTOO
TTaarrggeettTTaabbllee AASS
ttaarrggeett UUSSIINNGG
SSoouurrcceeTTaabbllee AASS
ssoouurrccee
OONN ttaarrggeett..eemmpp iidd =
ssoouurrccee..eemmpp iidd
WWHHEENN MMAATTCCHHEEDD
TTHHEENN
UUPPDDAATE SET ttaarrggeett..eemmpp
nnaammee = ssoouurrccee..eemmpp
nnaammee,, ttaarrggeett..ssaallaarryy =
ssoouurrccee..ssaallaarryy
WWHHEENN NOT MMAATTCCHHEEDD TTHHEENN
IINNSSEERRTT ((eemmpp iidd,, eemmpp nnaammee,, ssaallaarryy))
VVAALLUES (ssoouurrccee..eemmpp iidd,, ssoouurrccee..eemmpp nnaammee,
ssoouurrccee..ssaallaarryy));;

-- JOIN based merge (combining columns)


SSEELLEECCTT ee11.emp_id
.emp id,, ee11..eemmpp
nnaammee,, ee11 .. ssaa llaa rryy,,
ee22..bboonnuuss FFRROOMM
EEmmppllooyyeeee11 ee11
LLEEFFTT JJOOIINN Employee2 e2 OONN ee11..eemmpp ii dd = ee22..eemmpp ii dd ;;

-- INSERT with ON DUPLICATE KEY (MySQL)


IINNSSEERRTT INTO EEmmppllooyyeeee
((eemmpp iidd,, eemmpp nnaammee,,
ss aa ll aa rr yy )) SSEELLEECCTT eemmpp iidd,,
eemmpp nnaammee,, ssaallaarryy
FFRROOMM EEmmppllooyyeeee22 OONN
DDUUPPLLIICCAATTEE KKEEYY
UUPPDDAATTEE
eemmpp nnaammee =
VVAALLUUEESS((eemmpp
nnaammee)),, ssaallaarryy =
VVAA LLUU EE SS((ssaa llaa rryy));;

49.Balanced parentheses check


Question: Check if parentheses in a string are balanced.

Approach 1 - Using Stack (Normal Method):


java

pp uu bb ll ii cc bboooolleeaann
isBalanced(
isBalanced (SSttrriinngg ss)) {{
SSttaacckk< <Character>
Character > ssttaacckk
= nneeww SSttaa cc kk <<>>(());;

ff oo rr ((char
char c : ss..toCharArray
toCharArray(()))) {{
iiff ((c
c == ''(('' || cc == ''{{'' || cc
== ''[['')) {{
ss tt aa cc kk ..push
push(( cc )) ;;
}} ee ll ss ee if (cc == ''))'' || cc == ''}}'' || cc == '']]'')) {{
iiff
((ssttaacckk..isEmp
isEmp
ty(
ty ()))) {{
rr ee tt uu rr nn
ffaallssee;;
}}
cchhaarr ttoopp = ssttaacckk..pop pop(());;
iiff ((!!
isMatchingP
isMatchingPair( air (ttoop
p,, cc)))) {{
rr ee tt uu rr nn
ffaallssee;;
}}
}}
}}

rreettuurrnn ssttaa cc kk ..isEmpty


isEmpty(());;
}}

pp rr ii vv aa tt ee bboooolleeaann
isMatchingP
isMatchingPair( air (cchhaarr ooppeenn,, cc hh aa rr
cc ll oo ss ee )) {{ rr ee tt uu rr nn ((open
open == ''((''
&& cc ll oo ss ee == ''))'')) ||
((ooppeenn == ''{{'' && cc ll oo ss ee == ''}}'')) ||
((ooppeenn == ''[['' && cc ll oo ss ee == '']]''));;
}}
// Time: O(n), Space: O(n)

Approach 2 - Using Deque (Optimal):

jav
a
pp uu bb ll ii cc bboooolleeaann
isBalancedDeque((SSttrriinngg ss)) {{
DDeeqquuee<<Character> ss tt aa cc kk =
nneeww AArrrraayyDDeeqquuee<<>>(());;
MMaapp<<Character, CChhaarraacctteerr>>
pp aa ii rr ss = MM aa pp .. of((
' ' ))' ' , , ' ' ((' ' , ,
''}}'',, ''{{'',,
' ' ]]' ' , , ' ' [[' '
)); ;

ff oo rr ((char c :
ss..toCharArray(()))) {{
iiff ((pairs.containsValue((cc))))
{{
// Opening bracket
ss tt aa cc kk .. push(( cc )) ;;
}} ee ll ss ee if (ppaaiirrss..containsKey((cc)))) {{
// Closing bracket
iiff ((stack.isEmpty(() || stack.pop()) !=
pp aa ii rr ss .. get(( cc )) )) {{
rr ee tt uu rr nn ff aa ll ss ee ;;
}}
}}
}}

rreettuurrnn ss tt aa cc kk .. isEmpty(( )) ;;

50.Deadlock code sample


Question: Demonstrate deadlock situation in Java.

Approach - Creating Deadlock:

jav
a
ppuubblliicc ccllaassss DDeeaaddlloocckkDDeemmoo {{

pp rr ii vv aa tt ee ssttaa ttiicc final Object


rreessoouurrccee11 = nneeww
OO bb jj ee cc tt (( )) ;; pp rr ii vv aa tt ee ss tt aa tt ii cc
final Object rreessoouurrccee22 = nneeww
OObbjjeecctt(());;

pp uu bb ll ii cc ssttaattiicc void main(


main (SSttrriinngg[[]] aa rr gg ss )) {{
// Thread 1: locks resource1 then tries resource2
TThhrreeaadd tthhrreeaadd11 =
nneeww TThhrreeaa dd(((()) ->
{{ ssyynncchhrroonniizzeedd
(( rr ee ss oo uu rr cc ee 11 )) {{
SSyysstteemm.out
.out..println
println((""TThhrreeaadd 11:: LLoocckkeedd rr ee ss oo uu rr cc ee 11""));;

ttrryy {{
TThhrreeaadd..sleep
sleep((110000));;
}} ccaattcchh
((IInntteerrrruupptteeddEExxcceeppttii
oonn ee)) {{ ee..print
printS
StackT
tackTrace(
race ());;
}}

SSyysstteemm.out
.out..println
println((""TThhrreeaadd 11::
WWaaiittiinngg ffoorr rr ee ss oo uu rr cc ee 22""));;
ssyynncchhrroonniizzeedd (( rr ee ss oo uu rr cc ee 22 )) {{
SSyysstteemm.out
.out..println
println((""TThhrreeaadd 11:: LLoocckkeedd rr ee ss oo uu rr cc ee 22""));;
}}
}}
} } )); ;

// Thread 2: locks resource2 then tries resource1


TThhrreeaadd tthhrreeaadd22 =
nneeww TThhrreeaa dd(((()) ->
{{ ssyynncchhrroonniizzeedd
(( rr ee ss oo uu rr cc ee 22 )) {{
SSyysstteemm.out
.out..println
println((""TThhrreeaadd 22:: LLoocckkeedd rr ee ss oo uu rr cc ee 22""));;

ttrryy {{
TThhrreeaadd..sleep
sleep((110000));;
}} ccaattcchh
((IInntteerrrruupptteeddEExxcceeppttii
oonn ee)) {{ ee..print
printS
StackT
tackTrace(
race ());;
}}

SSyysstteemm.out
.out..println
println((""TThhrreeaadd 22::
WWaaiittiinngg ffoorr rr ee ss oo uu rr cc ee 11""));;
ssyynncchhrroonniizzeedd (( rr ee ss oo uu rr cc ee 11 )) {{
SSyysstteemm.out
.out..println
println((""TThhrreeaadd 22:: LLoocckkeedd rr ee ss oo uu rr cc ee 11""));;
}}
}}
} } )); ;
tthhrreeaadd11..start
start(()
); ;
tthhrreeaadd22..start
start(()
); ;
}
} }
}

Solution - Avoiding Deadlock:

java

ppuubblliicc ccllaassss DDeeaaddlloocckkSSoolluuttiioonn {{

pp rr ii vv aa tt ee ssttaa ttiicc final Object


rreessoouurrccee11 = nneeww
OO bb jj ee cc tt (( )) ;; pp rr ii vv aa tt ee ss tt aa tt ii cc
final Object rreessoouurrccee22 = nneeww
OObbjjeecctt(());;

pp uu bb ll ii cc ssttaattiicc void main(


main (SSttrriinngg[[]] aa rr gg ss )) {{
// Both threads lock resources in same order
TThhrreeaadd tthhrreeaadd11 =
nneeww TThhrreeaa dd(((()) ->
{{ ssyynncchhrroonniizzeedd
(( rr ee ss oo uu rr cc ee 11 )) {{
SSyysstteemm.out. .out .println(
println (""TThhrreeaadd 11::
LLoocckkeedd rr ee ss oo uu rr cc ee 11""));;
ssyynncchhrroonniizzeedd (( rr ee ss oo uu rr cc ee 22 ))
{{
SSyysstteemm.out. .out .println(
println (""TThhrreeaadd 11:: LLoocckkeedd rr ee ss oo uu rr cc ee 22""));;
}}
}}
} } )); ;

TThhrreeaadd tthhrreeaadd22 = nneeww TThhrreeaa dd(((()) -> {{


ssyynncchhrroonniizzeedd ((resource1) {{ // Same order as thread1
SSyysstteemm.out.
.out .println(
println (""TThhrreeaadd 22::
LLoocckkeedd rr ee ss oo uu rr cc ee 11""));;
ssyynncchhrroonniizzeedd (( rr ee ss oo uu rr cc ee 22 ))
{{
SSyysstteemm.out.
.out .println(
println (""TThhrreeaadd 22:: LLoocckkeedd rr ee ss oo uu rr cc ee 22""));;
}}
}}
} } )); ;

tthhrreeaadd11..start(
start ()
); ;
tthhrreeaadd22..start(
start ()
;
);
}}
}}

51. Print Employee names by joining date/age


Question: Sort and print employees by joining date or age.
Approach - Stream Sorting:

jav
a
cc ll aa ss ss
EEmmppllooyyee
ee {{
pprriivvaattee
SSttrriinngg
nnaammee;;
pprriivvaattee
LLooccaallDDaattee
jjooiinniinnggDDaattee;;
pp rr ii vv aa tt ee iinntt
aa gg ee ;;

ppuubblliicc EEmmppllooyyeeee((Sttrriinngg nnaammee,,


LLooccaallDDaattee jjooiinniinnggDDaattee,, iinntt
aaggee)) {{ tt hh ii ss .. nn aa mm ee = nnaammee;;
tthhiiss..jjooiinniinnggDDaattee = jjooiinniinnggDDaattee;;
tthhiiss..aaggee = aa ggee;;
}}

// Getters
pp uu bb ll ii cc SString
tring getName(
getName ()) {{ rr ee tt uu rr nn nnaammee;; }}
pp uu bb ll ii cc LLooccaallDDaattee getJoiningDate(
getJoiningDate ()) {{
rr ee tt uu rr nn jj oo ii nn ii nn gg DD aa tt ee ;; }}
pp uu bb ll ii cc iinntt getAge(
getAge ()) {{ rr ee tt uu rr nn
aa gg ee ;; }}
}}

ccllaassss EEmmppllooyyeeeeSSoorrttiinngg {{

// Sort by joining date


pp uu bb ll ii cc LLiisstt<
<Sttrriinngg>>
sortByJoiningDate(
sortByJoiningDate (LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess)) {{ rr ee tt uu rr nn
eemmppllooyyeeeess..stream stream(())
..sorted
sorted((Comparator. comparing((EEmmppllooyyeeee::getJoiningDate
Comparator .comparing ::getJoiningDate))))
..map
map((EEmmppllooyyeeee::getName
::getName))
..collect
collect((CCoolllleeccttoorrss..toList
toList(())));;
}}

// Sort by age
ppuubblliicc LLiisstt<
<Sttrriinngg>>
sortByAge(
sortByAge (LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess)) {{ rr ee tt uu rr nn
eemmppllooyyeeeess..stream
stream(())
..sorted
sorted((Comparator. comparingInt((EEmmppllooyyeeee::getAge
Comparator .comparingInt ::getAge))))
..map
map((EEmmppllooyyeeee::getName
::getName))
..collect
collect((CCoolllleeccttoorrss..toList
toList(())));;
}}

// Sort by joining date (descending)


pp uu bb ll ii cc LLiisstt<
<Sttrriinngg>>
sortByJoiningDateDesc(
sortByJoiningDateDesc (LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess)) {{ rr ee tt uu rr nn
eemmppllooyyeeeess..stream
stream(())
..sorted
sorted((Comparator. comparing((EEmmppllooyyeeee::getJoiningDate
Comparator .comparing ::getJoiningDate))..reversed
reversed(())))
..map
map((EEmmppllooyyeeee::getName
::getName))

You might also like