Comparator를 이용해서 TreeMap 정렬 기준을 바꾸고 있는데
정렬기준은 바뀌는데 중복을 막는 기능이 사라졌어요...
작성은 붙여넣은 것 처럼 했는데
Descending Class에서 어떻게 하면 중복을 방지할 수 있을지 모르겠어요
책에서는 Collections.sort를 사용해서 했다고 하는데
꼭 Collection.sort를 사용해야만 정렬할 수 있는건가요
class Descending에서 해결할 수 있는 방법은 없는지 궁금합니다.
=======================================================
import java.util.*;
class Question1
{ static TreeMap tree = new TreeMap();
public static void main(String[] args)
{ Scanner s = new Scanner(System.in);
String data = s.nextLine();
PrintReverse(data);
}
static void Check(String data, TreeMap tre)
{ char[] seperate = new char[data.length()];
for(int i = 0; i<data.length(); i++)
{ seperate[i] = data.charAt(i); }
for(int i = 0; i<data.length(); i++)
{ if(data.charAt(i)<65 || (data.charAt(i)>91 && data.charAt(i)<97) || data.charAt(i)>123)
{ System.out.println("알파벳만 써 주시기 바랍니다.");
break;
}
}
for(int i = 65; i<128; i++)
{ int count = 0;
for(int j = 0; j<seperate.length; j++)
{ if(seperate[j]==(char)i)
{ count++;
tre.put(seperate[j], count);
}
}
}
}
static void Print(String data, TreeMap tre2)
{ Check(data, tre2);
Set set = tre2.entrySet();
Iterator it = set.iterator();
while(it.hasNext())
{ Map.Entry e = (Map.Entry)it.next();
Integer value = 0;
Object obj = e.getValue();
if(obj instanceof Integer)
{ value = (Integer)obj;
}
System.out.print(e.getKey()+" : ");
for(int i = value; i>0; i--)
{ System.out.print("#");
}
System.out.println(" "+value);
}
}
static void PrintReverse(String data)
{ TreeMap rtree = new TreeMap(new Descending());
System.out.println("역방향");
Print(data, rtree);
}
}
class Descending implements Comparator
{ public int compare(Object o1, Object o2)
{ if(o1 instanceof Map.Entry && o2 instanceof Map.Entry)
{ Map.Entry c1 = (Map.Entry)o1;
Map.Entry c2 = (Map.Entry)o2;
int v1 = ((Integer)e1.getValue()).intValue();
int v2 = ((Integer)e2.getValue()).intValue();
return v2-v1;
}
return -1;
}
}