Java 附加字符串的ArrayList整数排序
我试图对ArrayList中的整数进行排序,这部分工作正常,但我也试图使并行数组与正确的整数匹配。我也不能把它们组合成一个对象。如果我有3个单词和3个数字(ArrayList中的数字和ArrayList中的单词(“Hello”-2,“-5”,代表“-1”).我想让For和1排在第一位,然后Hello和to last将是and 5。因此,它将带数字的单词。我下面的代码是对整数的正确排序,但这些单词似乎是随机的Java 附加字符串的ArrayList整数排序,java,string,sorting,arraylist,int,Java,String,Sorting,Arraylist,Int,我试图对ArrayList中的整数进行排序,这部分工作正常,但我也试图使并行数组与正确的整数匹配。我也不能把它们组合成一个对象。如果我有3个单词和3个数字(ArrayList中的数字和ArrayList中的单词(“Hello”-2,“-5”,代表“-1”).我想让For和1排在第一位,然后Hello和to last将是and 5。因此,它将带数字的单词。我下面的代码是对整数的正确排序,但这些单词似乎是随机的 void quickSort2 (ArrayList<Integer> li
void quickSort2 (ArrayList<Integer> list, int first, int last, ArrayList list2){
//Set first and last
int g = first, h = last;
int midIndex, dividingValue;
//middle values
midIndex = (first + last) / 2;
dividingValue = list.get(midIndex);
System.out.println("midIdex = "+midIndex + "first = "+first+"last = "+last);
//find if higher or lower
do{
while (list.get(g) < dividingValue) {
g++;
}
while (list.get(h) > dividingValue){
h--;
}
if (g <= h){
//Switch ints (Works)
int temp = list.get(g);
list.set(g,list.get(h));
list.set(h,temp);
g++;
h--;
//Switch Strings with the ints (Doesnt work)
ArrayList blah = new ArrayList();
blah.add(list2.get(g));
list2.set(g,list2.get(h));
list2.set(h,blah.get(0));
}
}
while (g<h);
//Back to the method
if(h>first) {
quickSort2(list, first, h, list2);
}
if(g<last) {
quickSort2(list, g, last, list2);
}
}
void quickSort2(ArrayList列表、int-first、int-last、ArrayList列表2){
//首当其冲
int g=第一个,h=最后一个;
int midIndex,dividingValue;
//中间值
midIndex=(第一个+最后一个)/2;
dividingValue=list.get(midIndex);
System.out.println(“midIdex=“+midIndex+”first=“+first+”last=“+last”);
//找出是高还是低
做{
while(list.get(g)dividingValue){
h--;
}
如果(g可能在增加g和h的值之前,您应该尝试切换字符串…而且您不需要创建Arraylist blah-只需像对int那样获取字符串
类似这样的东西…我没有深入研究您的代码,但这很可能是一个错误
//Switch ints (Works)
int temp = list.get(g);
list.set(g,list.get(h));
list.set(h,temp);
// *** Don't increment here ***
// *** Switch Strings with the ints first ***
String tempStr = list2.get(g);
list2.set(g,list2.get(h));
list2.set(h,tempStr );
// *** Now increment ***
g++;
h--;
下面是一个简单的类,用于将整数键和字符串组合在一起:
public class DataItem {
// These are the pieces of data each DataItem will carry around
private int key;
private String data;
// This is a constructor; if you say new DataItem(2,"Hello"), it creates an
// object whose key is 2 and data is "Hello"
public DataItem(int key, String data) {
this.key = key;
this.data = data;
}
// A method to get the object's key
public int getKey() {
return key;
}
// A method to get the object's data
public String getData() {
return data;
}
}
现在,您的quickSort2
方法将采用ArrayList
而不是ArrayList
。当您在ArrayList
上使用get
方法时,它将返回一个完整的DataItem
,而不仅仅是一个Integer
。这意味着如果您想要整数,需要调用getKey()
来获取它。因此
dividingValue = list.get(midIndex);
你会说
dividingValue = list.get(midIndex).getKey();
而不是
while (list.get(g) < dividingValue) {
while(list.get(g)
是的
while (list.get(g).getKey() < dividingValue) {
while(list.get(g).getKey()
不过,好消息是,当您切换项时,它将切换整个数据项
,这意味着字符串
将保留整数,这是您想要的。因此,在“switch ints”下注释,将temp
的类型从int
更改为DataItem
。然后您的交换将交换所有内容
(为了更好地实现这一点,您可以使用DataItem
实现Comparable
,方法是将compareTo
方法添加到compareTo
中,通过只比较键
字段将一个数据项
与另一个进行比较。然后您可以在DataItem
的数组上使用内置排序和其他方法。我会让您阅读这篇文章。)使用排序映射实现。“我也不能将它们放入分组对象”为什么?键值对如何?通过“分组对象”,我假设你指的是一个既有整数又有字符串的对象。那么为什么你不能创建一个分组对象呢?当你只想对其中一个数据段进行排序作为键时,这是对多个数据段进行排序的正常方法。我只是在学习java,这是一个类。我可以这样做,但我不知道如果有人能解释的话,那就太好了。真的行了!谢谢你!我一直认为一旦你在If,你就呆在里面了。