Я написал компаратор, который вычисляет согласные в заданной строке для сравнения 2 строк, но это как-то заставляет TreeSet думать, что 2 строки равны (может быть, когда они имеют одинаковый размер).
public class SortDiff {
public static void main(String[] s1) {
List<String> list = Arrays.asList("century", "army", "spit", "twin", "frog", "guideline", "impulse",
"distributor", "hallway", "appeal", "fitness", "pudding", "mild", "enter", "kitchen", "constitutional",
"die", "condition", "morsel", "jealous", "colorful", "myth", "belly", "rugby", "valid", "shot",
"locate", "preference", "representative", "chart", "prince", "think", "threshold", "health", "sweater",
"volume", "poison", "lease", "toast", "diplomat", "trait", "cower", "slime", "handy", "example",
"sanctuary", "board", "crash", "large", "attract", "censorship", "room", "license", "smoke", "roll",
"taste", "inflate", "continuation", "establish", "fault", "gown", "dirty", "width", "qualify",
"reference", "excitement", "vegetable", "wear", "confusion", "concept", "willpower", "snarl", "develop",
"integration", "pie", "respectable", "fast", "limit", "shaft", "acceptance", "insert", "brown", "death",
"effective", "ticket", "play", "highway", "lot", "tablet", "mother", "pier", "facility", "match",
"animal", "sport", "laundry", "negligence", "white", "vat", "nuclear");
System.out.println(list.size() + "=====");
TreeSet<String> tree = new TreeSet<String>(new sortByConsonants());//
int count = 0;
for (String s : list) {
count++;
System.out.println(s);
System.out.println(tree.add(s));
}
System.out.println("===>" + count);
System.out.println(tree.size() + "=====");
Iterator itr = tree.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
}
Это класс компаратора, который я передаю TreeSet.
class sortByConsonants implements Comparator<String>{
public int compare(String a, String b)
{
return count(a,2)-count(b,2);
}
public boolean equals(String a,String b) {
return a.equals(b);
}
public int count(String line,int type) {
int vowels = 0, consonants = 0, digits = 0, spaces = 0;
line = line.toLowerCase();
for(int i = 0; i < line.length(); ++i)
{
char ch = line.charAt(i);
if(ch == 'a' || ch == 'e' || ch == 'i'
|| ch == 'o' || ch == 'u') {
++vowels;
}
else if((ch >= 'a'&& ch <= 'z')) {
++consonants;
}
else if( ch >= '0' && ch <= '9')
{
++digits;
}
else if (ch ==' ')
{
++spaces;
}
}
if(type==1) {
return vowels;
}else {
return consonants;
}
}
}
Может кто-нибудь, пожалуйста, посмотрите на него и найдите ошибку, которую я делаю !!
Цель: Я хочусортировка строк по количеству согласных (без использования библиотечного метода sort ())
Редактировать: изменена логика компаратора на
public int compare(String a, String b)
{
if(count(a,2)-count(b,2)==0) {
return 1;
}
return count(a,2)-count(b,2);
}
Все еще не работает !!
Edit = Для этого вопроса TreeSet не является правильной структурой данных, следует использовать ArrayList.