如何从a-z排序数组列表?

时间:2015-12-14 10:06:18

标签: android arrays sorting

我正在尝试按字母顺序基于名称对数组列表进行排序,其中包含类型,名称,URL和日期。我从 Browser.BookmarkColumns 中检索了除类型之外的信息。

在:

Default Browser    Google     www.Google.com     14/12/2013
Default Browser    BBC        www.BBC.com        13/12/2015
Default Browser    Amazon     www.Amazon.com     11/11/2014

后:

Default Browser    Amazon     www.Amazon.com     11/11/2014
Default Browser    BBC        www.BBC.com        13/12/2015
Default Browser    Google     www.Google.com     14/12/2013

这是我尝试过的但是没有用。

 int j = mCur.getCount();
 String[] mType = new String[j];
 String[] mTitles = new String[j];
 String[] murls = new String[j];
 long[] date = new long[j];

 for (int q=0; q<(j-1); q++) {
                String a = (mTitles[q]).toLowerCase();
                String b = (mTitles[q+1].toLowerCase());

                char[] c = a.toCharArray();
                char[] d = b.toCharArray();

                String temp, temp2, temp3 = null;
                long temp4 = 0;

                int lenc = c.length;
                int lend = d.length;
                int min =0;
                int count =0;

                if (lenc < lend)
                    min = lenc;
                else
                    min = lend;

                    if (c[count] > d[count]) {
                        temp = mTitles[count];
                        temp2 = mType[count];
                        temp3 = murls[count];
                        temp4 = date[count];

                        mTitles[count] = mTitles[count + 1];
                        mType[count] = mType[count + 1];
                        murls[count] = murls[count + 1];
                        date[count] = date[count + 1];

                        mTitles[count + 1] = temp;
                        mType[count + 1] = temp2;
                        murls[count + 1] = temp3;
                        date[count + 1] = temp4;
                    } else if (c[count] == d[count]) {
                        for (int w = 1; w < min; w++) {
                            if (c[w] > d[w]) {
                                temp = mTitles[w];
                                temp2 = mType[w];
                                temp3 = murls[w];
                                temp4 = date[w];

                                mTitles[w] = mTitles[w + 1];
                                mType[w] = mType[w + 1];
                                murls[w] = murls[w + 1];
                                date[w] = date[w + 1];

                                mTitles[w + 1] = temp;
                                mType[w + 1] = temp2;
                                murls[w + 1] = temp3;
                                date[w + 1] = temp4;
                            }
                        }
                    }
            }

5 个答案:

答案 0 :(得分:3)

首先,如果不是排序3个字符串数组+长数组,那么它将是一个更简单的任务。您封装所有字段并创建一个包含所有四个字段的类(让我们称之为MyData)。然后,您可以将所有新创建的对象放在某个集合中(例如ArrayList)。

因此,当您拥有ArrayList<MyData>时,您可以轻松使用Collections.sort传递您的列表以及所有排序逻辑所在的Comparator<T>接口的实现。

例如,如果您只想使用String title字段对整个列表进行排序,它可能如下所示:

Comparator<MyData>已实施比较功能compare(MyData o1, MyData o2){return o1.title.compareTo(o2);

答案 1 :(得分:3)

以上答案为java中有效排序数组列表提供了最佳示例。

在此之前,请阅读上述答案的说明here

我只是简化了上面的答案,以便您更好地理解它可以提供您所需的精确输出。

ArrayList<UserContainer> userList = new ArrayList<>();
    userList.add(new UserContainer("www.Google.com", "Google", "14/12/2013"));
    userList.add(new UserContainer("www.BBC.com", "BBC", "13/12/2015"));
    userList.add(new UserContainer("www.Amazon.com", "Amazon", "11/11/2014"));

    Log.i("Before Sorting :", "==========================>>");
    for (UserContainer obj : userList) {
        System.out.println("Default Browser: \t" + obj.name + "\t" + obj.date + "\t" + obj.webSite);
    }

    Collections.sort(userList, new Comparator<UserContainer>() {
        @Override
        public int compare(UserContainer first, UserContainer second) {
            return first.name.compareToIgnoreCase(second.name);
        }
    });


    Log.i("After Sorting :", "==========================>>");
    for (UserContainer obj : userList) {
        System.out.println("Default Browser: \t" + obj.name + "\t" + obj.date + "\t" + obj.webSite);
    }

模特课程:

    public class UserContainer {
    public UserContainer(String webSite, String name, String date) {
        this.webSite = webSite;
        this.name = name;
        this.date = date;
    }

    public String webSite = "";
    public String name = "";
    public String date = "";
}

答案 2 :(得分:0)

我建议创建自定义数组列表。

private ArrayList<UserContainer> userList=new ArrayList<UserContainer>();
UserContainer usercontainer=new UserContainer()
usercontainer.name=Amazon;
usercontainer.date=11/11/2014;
userList.add(usercontainer);


UserContainer usercontainer2=new UserContainer()
usercontainer.name=Google;
usercontainer.date=11/11/2014;
userList.add(usercontainer);

UserContainer usercontainer3=new UserContainer()
usercontainer.name=BBC;
usercontainer.date=11/11/2014;
userList.add(usercontainer);

Collections.sort(userList, new Comparator<UserContainer>() {
        @Override
        public int compare(UserContainer s1, UserContainer s2) {
            return s1.name.compareToIgnoreCase(s2.name);
        }
    });

型号: -

public class UserContainer {
public String name = "";
public String date = "";

}

我希望能帮助你。

答案 3 :(得分:0)

创建一个类并使用比较器或类似的。

如需进一步参考,请查看(How to sort an ArrayList in Java

答案 4 :(得分:0)

Arrays.sort(字符串数组); 这是一种很好的排序方式。

我建议您创建一个Object,例如&#39; BrowserStoredData&#39;对于列表的每个元素。需要字符串:

public class BrowserStoredData implements Comparable<BrowserStoredData> {

    String browserType;
    String browserName;
    String browserUrl;
    String browserDate;

    public BrowserStoredData(String browserType, String browserName,
            String browserUrl, String browserDate) {
        super();
        this.browserType = browserType;
        this.browserName = browserName;
        this.browserUrl = browserUrl;
        this.browserDate = browserDate;
    }

    public int compareTo(BrowserStoredData bsd) {
        return (this.browserName).compareTo(bsd.browserName);
    }

    @Override
    public String toString() {
        return browserType + "\t\t" + browserName + "\t\t" + browserUrl
                + "\t\t" + browserDate;
    }
}

使用该对象,您只需使用Collections.sort(yourList)即可轻松订购BrowserStoredData对象列表

例如:

    BrowserStoredData bsd1 = new BrowserStoredData("Default Browser", "Google", "www.Google.com", "14/12/2013");
    BrowserStoredData bsd2 = new BrowserStoredData("Default Browser", "BBC", "www.BBC.com", "13/12/2015");
    BrowserStoredData bsd3 = new BrowserStoredData("Default Browser", "Amazon", "www.Amazon.com", "11/11/2014");

    List<BrowserStoredData> listBrowsers = new ArrayList<BrowserStoredData>();
    listBrowsers.add(bsd1);
    listBrowsers.add(bsd2);
    listBrowsers.add(bsd3);

    Collections.sort(listBrowsers);

    for (int i = 0 ; i < listBrowsers.size() ; i++){
        BrowserStoredData bsd = listBrowsers.get(i);
        System.out.println(bsd.toString());
    }

退出将是:

Default Browser       Amazon      www.Amazon.com      11/11/2014
Default Browser       BBC         www.BBC.com         13/12/2015
Default Browser       Google      www.Google.com      14/12/201