import
java.util.*;
public
class
Main
{
static
boolean
compare(Map.Entry<Integer, Integer> p1,
Map.Entry<Integer, Integer> p2)
{
if
(p1.getValue().equals(p2.getValue()))
return
p1.getKey() < p2.getKey();
return
p1.getValue() > p2.getValue();
}
static
void
printSorted(
int
[] arr,
int
n)
{
Map<Integer, Integer> m
=
new
HashMap<Integer, Integer>();
for
(
int
i =
0
; i < n; i++)
m.put(arr[i], m.getOrDefault(arr[i],
0
) +
1
);
int
s = m.size();
List<Map.Entry<Integer, Integer> > list
=
new
ArrayList<Map.Entry<Integer, Integer> >(
m.entrySet());
Collections.sort(
list, (p1, p2) -> compare(p1, p2) ? -
1
:
1
);
System.out.print(
"Elements sorted by frequency are: "
);
for
(Map.Entry<Integer, Integer> entry : list) {
int
freq = entry.getValue();
while
(freq-- >
0
)
System.out.print(entry.getKey() +
" "
);
}
}
public
static
void
main(String[] args)
{
int
[] arr = {
2
,
3
,
2
,
4
,
5
,
12
,
2
,
3
,
3
,
3
,
12
};
int
n = arr.length;
printSorted(arr, n);
}
}