我正在尝试运行一个简单的ArrayList
程序。我在其中使用了collections.sort()
方法,但我没有得到输出排序。
我使用collections.sort()
方法的方式有问题吗?
请帮助我找到根本原因。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Vector;
public class Vector1 {
public static void main(String args[])
{
ArrayList<String> arraylist=new ArrayList<String>();
arraylist.add("Register.classname");
arraylist.add("com.jdbc.driver");
arraylist.add("create Statement");
arraylist.add("String Sql=Create table hello(column1 Number);");
arraylist.add("execute Statement");
Vector<String> vectorlist=new Vector<String>();
vectorlist.add("Register.classname");
vectorlist.add("com.jdbc.driver");
vectorlist.add("create Statement");
vectorlist.add("String Sql=Create table hello(column1 Number);");
vectorlist.add("execute Statement");
Collections.sort(arraylist);
Collections.sort(vectorlist);
for(int i=0; i<arraylist.size();i++)
{
System.out.println("Arraylist:"+arraylist.get(i));
}
for(int j=0;j<arraylist.size();j++)
{
System.out.println("Vectorlist:"+vectorlist.get(j));
}
}
}
Output:
Arraylist:Register.classname
Arraylist:String Sql=Create table hello(column1 Number);
Arraylist:com.jdbc.driver
Arraylist:create Statement
Arraylist:execute Statement
Vectorlist:Register.classname
Vectorlist:String Sql=Create table hello(column1 Number);
Vectorlist:com.jdbc.driver
Vectorlist:create Statement
Vectorlist:execute Statement
答案 0 :(得分:8)
已排序。它只是根据String.compareTo
排序,这是一个有序的词典比较。在Unicode中,所有ASCII大写字母都早于ASCII小写字母,这就是为什么你得到你得到的结果。
如果您想要不区分大小写的比较,则应将Comparator<String>
传递给Collections.sort
- 例如,Collator
。
顺便说一下,这段代码已被破坏:
for(int j=0;j<arraylist.size();j++)
{
System.out.println("Vectorlist:"+vectorlist.get(j));
}
您应该使用vectorlist.size()
。或者,更好的是,使用增强的for循环:
for (String item : vectorlist) {
System.out.println("Vectorlist: " + item);
}
答案 1 :(得分:2)
这是你的输出:
Register.classname
String Sql=Create table hello(column1 Number);
com.jdbc.driver
create Statement
execute Statement
这似乎是正确的顺序按字母顺序。您还期待什么?
Collections#Sort
使用compareTo
java.lang.String
的默认实现,即按字母顺序排序字符串。
答案 2 :(得分:1)
输出按字母顺序排序:
Arraylist:Register.classname
Arraylist:String Sql=Create table hello(column1 Number);
Arraylist:com.jdbc.driver
Arraylist:create Statement
Arraylist:execute Statement
请记住,A-Z出现在a-z之前。
为了对不区分大小写的用法进行排序:
Collections.sort(arraylist, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
});
答案 3 :(得分:0)
排序是正确的。默认字符串排序应用于集合。排序是根据起始字母的ASCII值按升序进行的
答案 4 :(得分:0)
要在使用Collection.sort()时忽略大小写,您应该编写自己的Comparator
public class IgnoreCase implements Comparator<Object> {
public int compare(Object i, Object j) {
String a = (String) i;
String b = (String) j;
return a.toLowerCase().compareTo(b.toLowerCase());
}
}
Collections.sort(arraylist, new IgnoreCase ());
答案 5 :(得分:0)
您的输出按字母顺序正确排序。
正如您在ascii表中看到的那样http://www.asciitable.com/
大写字符位于小写字符之前。
所以:
XXXXXXXX:String Sql=Create table hello(column1 Number);
来吧:
XXXXXXXX:com.jdbc.driver
如果它们具有相同的前缀。如果要对字符串进行排序而不管其大小写,请使用大小写的比较器:
Collections.sort(arraylist, String.CASE_INSENSITIVE_ORDER);
Collections.sort(vectorlist, String.CASE_INSENSITIVE_ORDER);
然后你的输出将是:
输出:
Arraylist:com.jdbc.driver
Arraylist:create Statement
Arraylist:execute Statement
Arraylist:Register.classname
Arraylist:String Sql=Create table hello(column1 Number);
Vectorlist:com.jdbc.driver
Vectorlist:create Statement
Vectorlist:execute Statement
Vectorlist:Register.classname
Vectorlist:String Sql=Create table hello(column1 Number);
答案 6 :(得分:0)
您正在排序字符串,排序正常。但是,您没有意识到Unicode字符集的结构。 Unicode的字符0-127与ASCII集相同,大写字母在小写字母之前。有关列表,请参阅http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters。因此,注册先于创建,依此类推。
如果您需要不区分大小写的排序或区分大小写的匹配,则应使用Collator
和CollationKey
类。