C#排序与Java Collections.Sort给出不同的结果 - java

        

    

C#代码:

public class Test
{
    public static void Main()
    {
        List<string> list = new List<string> { "[email protected]", "[email protected]", "[email protected]" };
        list.Sort();
        for(int i=0;i<list.Count;i++){
            Console.WriteLine(list[i]);
        }

    }
}

结果:

[email protected]

[email protected]

[email protected]

Java代码:

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        List<String> list = new ArrayList<String>();
        list.add("[email protected]");
        list.add("[email protected]");
        list.add("[email protected]");
        Collections.sort(list);
        System.out.println(list);
    }
}

结果:

[john00 @ mail.com,john_newyork @ mail.com,johnsmith @ mail.com]

'_'的ascii值为95,'0'的ascii值为48。因此,理想地,在字符串排序中,'0'应该位于'_'之前。为什么C#将“ _”放在“ 0”之前?

但是当我尝试比较字符“ _”和“ 0”时。两种语言都可以正确比较,并在“ _”之前保留“ 0”。

Console.WriteLine('0'>'_'); -> False (C#)
System.out.println('0'>'_'); -> false (Java)

参考方案

要按ASCII值排序,请使用StringComparer.Ordinal

list.Sort(StringComparer.Ordinal);

Java-固定大小的列表与指定初始容量的列表之间的差异 - java

我在理解这一点上遇到了问题。当我们做 List<Integer> list = Arrays.asList(array); 我们不能在该列表上使用添加,删除之类的方法。我知道Arrays.asList()返回固定大小的列表。我不明白的是,如果我们创建一个具有指定初始容量的列表,例如List<Integer> list2 = new A…

是否有任何数据结构可以避免重复,保留顺序和随机访问 - java

以前,我正在寻找具有以下特征的数据结构。避免重复迭代顺序将与插入顺序相同在Java中,我使用LinkHashSet,在Python中,我使用OrderedDict现在,除了2个要求之外,我还有一个附加要求能够通过索引进行随机访问,这意味着我可以通过data[123]访问有没有可用的数据结构?还是我需要退回使用List? List可以完全满足第二和第三要求,但…

筛选自定义数据结构的设计模式 - java

系统为我提供了以下数据结构,现在我需要应用规则来过滤给定的购物车。一个示例是过滤掉用户bob列出的所有项目以及使用付款方式信用卡的所有项目。该规则视情况而定。下面所有这些都是我的请求和响应中的复杂类型,没有具体实现,而是具体实现。将我的数据结构和应用于其的规则分离出来的最佳设计模式是什么?装饰器模式会有所帮助吗?欢迎您提出建议。 public class P…

我应该一直使用Java接口编程,尤其是对于集合 - java

正如建议的那样,几乎所有地方都应该一直使用接口,尤其是在处理集合时。// Using interfaces List<Integer> list = new LinkedList<Integer>(); ((LinkedList) list).offerFirst(num); //Using concrete class Linked…

基本的字符串操作,在While循环中删除最后一个字符 - java

我在下面的基本代码中苦苦挣扎,我如何防止最后一个逗号“,”被附加到字符串。 String outScopeActiveRegionCode=""; List<String> activePersons=new ArrayList<String>(); HashSet<String> outScopeAc…