<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 自定義的類User: ~~~ package com.example.testcomparator; public class User{ private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString(){ return "name:"+name+"--age:"+age; } } ~~~ 當我們有一組User對象組合時,我們要對其中的User對象排序,優先對name排序,如果name一樣,則再依據age排序。 ### 1.使用Comparator接口來排序: ~~~ package com.example.testcomparator; import java.util.Comparator; //先比較id,再比較age public class UserComparator implements Comparator<User>{ @Override public int compare(User user0, User user1) { // TODO Auto-generated method stub int flag = 0; flag = user0.getName().compareTo(user1.getName()); if(flag == 0) { // 如果id一樣,比較年齡, 返回比較年齡結果 return user0.getAge() - user1.getAge(); } else { return flag; // 名字不一樣, 返回比較id的結果. } } } ~~~ 排序方法,我們分別對List和數組來分別排序: (1)List排序: ~~~ List userList = new ArrayList<User>(); userList.add(new User("a",5)); userList.add(new User("c",6)); userList.add(new User("a",4)); userList.add(new User("b",2)); userList.add(new User("b",3)); userList.add(new User("c",7)); for(int i = 0;i<userList.size();i++){ Log.i(TAG, "排序前:"+userList.get(i)); } Collections.sort(userList, new UserComparator()); for(int i = 0;i<userList.size();i++){ Log.i(TAG, "排序后:"+userList.get(i)); } ~~~ (2)對數組排序: ~~~ User[] userArray = new User[]{ new User("a", 5), new User("c", 6), new User("a", 4), new User("b", 2), new User("b", 3), new User("c", 7)}; for(int i = 0;i<userArray.length;i++){ Log.i(TAG, "排序前:"+userArray[i]); } Arrays.sort(userArray,new UserComparator()); for(int i = 0;i<userArray.length;i++){ Log.i(TAG, "排序后:"+userArray[i]); } ~~~ 輸出結果: 排序前:name:a--age:5 排序前:name:c--age:6 排序前:name:a--age:4 排序前:name:b--age:2 排序前:name:b--age:3 排序前:name:c--age:7 排序后:name:a--age:4 排序后:name:a--age:5 排序后:name:b--age:2 排序后:name:b--age:3 排序后:name:c--age:6 排序后:name:c--age:7 ### 2.使用Comparable接口來排序: 先要改造User類: ~~~ package com.example.testcomparator; public class User implements Comparable<Object>{ private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString(){ return "name:"+name+"--age:"+age; } @Override //先比較id,id相同后再比較age public int compareTo(Object object) { // TODO Auto-generated method stub int flag = 0; flag = name.compareTo(((User)object).getName()); // 使用字符串的比較 if(flag == 0) { // 如果id一樣,比較年齡, 返回比較年齡結果 return age - ((User)object).getAge(); } else { return flag; // 名字不一樣, 返回比較id的結果. } } } ~~~ (1)List排序: ~~~ List userList = new ArrayList<User>(); userList.add(new User("a",5)); userList.add(new User("c",6)); userList.add(new User("a",4)); userList.add(new User("b",2)); userList.add(new User("b",3)); userList.add(new User("c",7)); for(int i = 0;i<userList.size();i++){ Log.i(TAG, "排序前:"+userList.get(i)); } Collections.sort(userList); for(int i = 0;i<userList.size();i++){ Log.i(TAG, "排序后:"+userList.get(i)); } ~~~ (2)對數組排序: ~~~ User[] userArray = new User[]{ new User("a", 5), new User("c", 6), new User("a", 4), new User("b", 2), new User("b", 3), new User("c", 7)}; for(int i = 0;i<userArray.length;i++){ Log.i(TAG, "排序前:"+userArray[i]); } Arrays.sort(userArray); for(int i = 0;i<userArray.length;i++){ Log.i(TAG, "排序后:"+userArray[i]); } ~~~ 輸出結果: 排序前:name:a--age:5 排序前:name:c--age:6 排序前:name:a--age:4 排序前:name:b--age:2 排序前:name:b--age:3 排序前:name:c--age:7 排序后:name:a--age:4 排序后:name:a--age:5 排序后:name:b--age:2 排序后:name:b--age:3 排序后:name:c--age:6 排序后:name:c--age:7 ### 3.總結: comparable ? Comparator 都是用來實現集合中的排序的。 Comparable是在集合內部定義的方法實現的排序, Comparator是在集合外部實現的排序, 所以,如想實現排序,就需要在集合外定義Comparator接口的方法compare()或在集合內實現Comparable接口的方法compareTo()。 兩種方法各有優劣: ?用Comparable 簡單, 只要實現Comparable 接口的對象直接就成為一個可以比較的對象,但是需要修改源代碼。 用Comparator 的好處是不需要修改源代碼, 而是另外實現一個比較器, 當某個自定義的對象需要作比較的時候,把比較器和對象一起傳遞過去就可以比大小了,? 并且在Comparator 里面用戶可以自己實現復雜的可以通用的邏輯,使其可以匹配一些比較簡單的對象,那樣就可以節省很多重復勞動了。 用 Comparator 是策略模式(strategy design pattern),就是不改變對象自身,而用一個策略對象(strategy object)來改變它的行為,所以,我們推薦使用Comparator. ### 4.參考資料: 1.Comparator和Comparable在排序中的應用 [http://www.blogjava.net/fastunit/archive/2008/04/08/191533.html](http://www.blogjava.net/fastunit/archive/2008/04/08/191533.html) 2.Java中,如果想要排序,實現Comparator接口 //與Comparable 的區別? [http://zhidao.baidu.com/link?url=54BbyjAWPv5pG3l9c_ww0-4vPPdQSZ6FZ6u-yJAh52bJwXRRyTPN9iUUvpUYzKOMBLhl80Po2qfBI4Vipansh_](http://zhidao.baidu.com/link?url=54BbyjAWPv5pG3l9c_ww0-4vPPdQSZ6FZ6u-yJAh52bJwXRRyTPN9iUUvpUYzKOMBLhl80Po2qfBI4Vipansh_)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看