通过Comparable Interface </object>对ArrayList <object>进行排序

时间:2013-04-24 07:11:31

标签: java sorting arraylist comparable

实际上我想对Array List of objects进行排序。我为此目的使用Comparable接口。它完全正常工作但问题是,当我进行排序时,就是给出了这两个问题。

  1. 所有拥有首字母大写字母的名字都汇集在一起​​,所有名字第一字母小的名字都在底部聚集在一起。

  2. 所有排序后的大写字母单词汇总后,所有小写字母一起排在最底层。

  3. 这是我的豆

    MyShares.java

       public class Myshares implements Comparable<Myshares> {
    
            int id, parent;
            String name, path, type, shared_with, shared_or_not, upload_request;
    
            public int getParent() {
                return parent;
            }
    
            public void setParent(int parent) {
                this.parent = parent;
            }
    
            public String getUpload_request() {
                return upload_request;
            }
    
            public void setUpload_request(String upload_request) {
                this.upload_request = upload_request;
            }
    
            public int getId() {
                return id;
            }
    
            public void setId(int id) {
                this.id = id;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public String getPath() {
                return path;
            }
    
            public void setPath(String path) {
                this.path = path;
            }
    
            public String getType() {
                return type;
            }
    
            public void setType(String type) {
                this.type = type;
            }
    
            public String getShared_with() {
                return shared_with;
            }
    
            public void setShared_with(String shared_with) {
                this.shared_with = shared_with;
            }
    
            public String getShared_or_not() {
                return shared_or_not;
            }
    
            public void setShared_or_not(String shared_or_not) {
                this.shared_or_not = shared_or_not;
            }
    
            @Override
            public int compareTo(Myshares another) {
    
                return this.name.compareTo(another.getName());
            }
    
        }
    

    这是输出

    enter image description here

    我认为它基于ASCII码。我想要一个完整的排序列表。请看一下。

5 个答案:

答案 0 :(得分:6)

如果您希望不区分大小写,我建议您更改compareTo()方法,而不是使用compareToIgnoreCase()的{​​{1}}方法 - 即:

String

答案 1 :(得分:5)

更改

@Override
public int compareTo(Myshares another) {
    return this.name.compareTo(another.getName());
}

@Override
public int compareTo(Myshares another) {
    return String.CASE_INSENSITIVE_ORDER.compare(this.name, another.getName());
}

或使用nullPainter发布的更具可读性且非常好的解决方案。

答案 2 :(得分:2)

您应该调整compareTo()方法

return this.name.toLowerCase().compareTo(another.getName().toLowerCase());

答案 3 :(得分:2)

将compareTo方法替换为:

public int compareTo(Myshares another) {
  return this.name.compareToIgnoreCase(another.getName());
}

答案 4 :(得分:2)

我给了你一个我编写的现有比较器的源代码,该比较器执行完整的Alpha数字排序,并且可以使用10,1等等名称中的数字

要使用它,你可以这样做:Collections.sort(myList,comparator);

替代方法也可以在您的比较方法中将双面小写。但是,只要你有数字或符号,它就会被抛弃,所以我个人会使用比较器。

使用以下源代码检查GIST:https://gist.github.com/gondor/9328de5fa0cce130bc3b