通过可比接口对ArrayList <Object>进行排序

Nik*_*wal 0 java sorting arraylist comparable

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

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

  2. 所有排序后的大写字母单词都汇集在一起​​,之后所有的小写字母一起出现在底部.

这是我的豆子

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());
        }

    }
Run Code Online (Sandbox Code Playgroud)

这是输出

在此输入图像描述

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

nul*_*ter 6

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

public int compareTo(Myshares another) {
    return this.name.compareToIgnoreCase(another.getName());
}
Run Code Online (Sandbox Code Playgroud)


jlo*_*rdo 5

更改

@Override
public int compareTo(Myshares another) {
    return this.name.compareTo(another.getName());
}
Run Code Online (Sandbox Code Playgroud)

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

或者使用nullPainter发布的更具可读性和非常好的解决方案.