Java 如何为字母顺序与字母顺序不同的字母字符制作比较器
我的问题是,我想比较一些不使用字母排序的字符。 这是我的顺序关系:A 我如何为这个创建一个比较器?我必须这样写所有的案例:Java 如何为字母顺序与字母顺序不同的字母字符制作比较器,java,char,comparator,Java,Char,Comparator,我的问题是,我想比较一些不使用字母排序的字符。 这是我的顺序关系:Aorder并将查找[char1]与查找[char2]进行比较。一种解决方案是将字符放入列表并使用索引。首先,我创建了一个查找表,但我的项目经理不希望it@T.Sutter当然,你的项目经理应该告诉你他想要什么?使用枚举而不是字符不是更好吗?据我所知,您只想比较单个字符,而不是字符串。创建一个查找表char->order并将查找[char1]与查找[char2]进行比较。一种解决方案是将字符放入列表并使用索引。首先,我创建了一个查
if (char1.equals(char2)) {
return 0;
} else if (char1.equals("A")) {
return -1;
} else if (char1.equals("B") && char2.equals("A")) {
return 1;
} else if (char1.equals("T")
&& (char2.equals("B") || char2.equals("A"))) {
return 1;
} else if (char1.equals("Q")
&& (char2.equals("T") || char2.equals("B") || char2
.equals("A"))) {
return 1;
} else if (char1.equals("C")
&& (char2.equals("Q") || char2.equals("T")
|| char2.equals("B") || char2.equals("A"))) {
return 1;
} else if (char1.equals("D")
&& (char2.equals("C") || char2.equals("Q")
|| char2.equals("T") || char2.equals("B") || char2
.equals("A"))) {
return 1;
} else if (char1.equals("E")
&& (char2.equals("D") || char2.equals("C")
|| char2.equals("Q") || char2.equals("T")
|| char2.equals("B") || char2.equals("A"))) {
return 1;
} else if (char1.equals("F")
&& (char2.equals("E") || char2.equals("D")
|| char2.equals("C") || char2.equals("Q")
|| char2.equals("T") || char2.equals("B") || char2
.equals("A"))) {
return 1;
}
在数组char[]或列表中按所需顺序存储字符 基于列表/数组中字符的索引进行比较
list.indexOfchar1-list.indexOfchar2 在数组char[]或列表中按所需顺序存储字符 基于列表/数组中字符的索引进行比较
list.indexOfchar1-list.indexOfchar2 有一个非常简单的解决方案: 首先将您的角色放入列表:
char[] arrayChars= {'A','B','T', ... };
List<Character> sortedChars= new ArrayList<Character>();
for (char c : arrayChars) { // Arrays.asList won't work
sortedChars.add(c);
}
有一个非常简单的解决方案: 首先将您的角色放入列表:
char[] arrayChars= {'A','B','T', ... };
List<Character> sortedChars= new ArrayList<Character>();
for (char c : arrayChars) { // Arrays.asList won't work
sortedChars.add(c);
}
我会这样做
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class Compare {
public static void main(String[] args) {
final List<Character> reference = new ArrayList<Character>(
Arrays.asList(new Character[] {'A','B','T','Q','C','D','E','F'}));
Character[] toBeSorted = {'A','B','C','D','E','F','Q','T'};
Comparator<Character> myComparator = new Comparator<Character>() {
public int compare(Character o1, Character o2) {
Integer i1 = reference.indexOf(o1);
Integer i2 = reference.indexOf(o2);
return i1.compareTo(i2);
}
};
Arrays.sort(toBeSorted, myComparator);
System.out.println(Arrays.asList(toBeSorted));
}
}
我会这样做
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class Compare {
public static void main(String[] args) {
final List<Character> reference = new ArrayList<Character>(
Arrays.asList(new Character[] {'A','B','T','Q','C','D','E','F'}));
Character[] toBeSorted = {'A','B','C','D','E','F','Q','T'};
Comparator<Character> myComparator = new Comparator<Character>() {
public int compare(Character o1, Character o2) {
Integer i1 = reference.indexOf(o1);
Integer i2 = reference.indexOf(o2);
return i1.compareTo(i2);
}
};
Arrays.sort(toBeSorted, myComparator);
System.out.println(Arrays.asList(toBeSorted));
}
}
如果要使用自定义字符顺序比较字符串,请创建,例如
如果要使用自定义字符顺序比较字符串,请创建,例如
整数N带有一个所谓的自然顺序。因此,您只需按照您想要实现的顺序,将您的内容放入一个由整数索引的列表中。然后,当需要比较2个字符时,您可以比较它们的索引,就这样 整数N带有一个所谓的自然顺序。因此,您只需按照您想要实现的顺序,将您的内容放入一个由整数索引的列表中。然后,当需要比较2个字符时,您可以比较它们的索引,就这样 最后,我使用String,但它可以很好地使用:
public class IndiceRepetitionComparator implements Comparator<String> {
List<String> relationOrdre = Arrays.asList("A", "B", "T", "Q", "C", "D", "E", "F", "G", "H", "I", "J", "K",
"L", "M", "N", "O", "P", "R", "S", "U", "V", "W", "X", "Y", "Z");
@Override
public int compare(String indiceRepetition1, String indiceRepetition2) {
// même objet
if (indiceRepetition1 == indiceRepetition2) {
return 0;
}
if (indiceRepetition1 == null) {
return -1;
}
if (indiceRepetition2 == null) {
return -1;
}
return (relationOrdre.indexOf(indiceRepetition1) - relationOrdre.indexOf(indiceRepetition2) > 0) ? 1 : -1;
}
}
谢谢您的帮助最后,我使用了String,但它可以很好地使用:
public class IndiceRepetitionComparator implements Comparator<String> {
List<String> relationOrdre = Arrays.asList("A", "B", "T", "Q", "C", "D", "E", "F", "G", "H", "I", "J", "K",
"L", "M", "N", "O", "P", "R", "S", "U", "V", "W", "X", "Y", "Z");
@Override
public int compare(String indiceRepetition1, String indiceRepetition2) {
// même objet
if (indiceRepetition1 == indiceRepetition2) {
return 0;
}
if (indiceRepetition1 == null) {
return -1;
}
if (indiceRepetition2 == null) {
return -1;
}
return (relationOrdre.indexOf(indiceRepetition1) - relationOrdre.indexOf(indiceRepetition2) > 0) ? 1 : -1;
}
}
谢谢您的帮助使用枚举而不是字符不是更好吗?据我所知,您只想比较单个字符,而不是字符串。创建一个查找表char->order并将查找[char1]与查找[char2]进行比较。一种解决方案是将字符放入列表并使用索引。首先,我创建了一个查找表,但我的项目经理不希望it@T.Sutter当然,你的项目经理应该告诉你他想要什么?使用枚举而不是字符不是更好吗?据我所知,您只想比较单个字符,而不是字符串。创建一个查找表char->order并将查找[char1]与查找[char2]进行比较。一种解决方案是将字符放入列表并使用索引。首先,我创建了一个查找表,但我的项目经理不希望it@T.Sutter当然,你的项目经理应该告诉你他想要什么?谢谢!看起来很简单,字符[]上没有索引。我必须使用ListOops,你是对的,修复了这很好。我昨天完成了代码谢谢!看起来很简单,字符[]上没有索引。我必须使用ListOops,你是对的,修复了这很好。我昨天完成了代码如果性能重要,不要使用LinkedList。使用ArrayList或更好的HashMap。@FrankPuffer为什么你认为ArrayList比LinkedList更快,可以使用它对列表进行顺序搜索?@Andreas:因为它很可能更好地利用硬件内存缓存。如果性能重要,不要使用LinkedList。使用ArrayList或更好的HashMap。@FrankPuffer为什么你认为ArrayList比LinkedList更快,可以用它对列表进行顺序搜索?@Andreas:因为它很可能更好地利用了硬件内存缓存。