首页 > 代码库 > Collection_Compare

Collection_Compare

冒泡

package com.bjsxt.sort.bubble;import java.util.Arrays;public class BubbleSort1 {    /**     * @param args     */    public static void main(String[] args) {        int[] arr ={9,8,7,6,5};                sort(arr);            }    //第一版本,很简单    public static void sort(int[] arr){        int len =arr.length;        for(int j=0;j<len-1;j++){            System.out.println("第"+(j+1)+"趟");            for(int i=0;i<len-1;i++){                System.out.print("第"+(i+1)+"次");                if(arr[i]>arr[i+1]){                    int temp = arr[i];                    arr[i] =arr[i+1];                    arr[i+1] =temp;                }                System.out.println(Arrays.toString(arr));            }        }    }    public static void sortSecond(int[] arr){        System.out.println("第一趟");        for(int i=0;i<arr.length-1;i++){            System.out.print("第"+(i+1)+"次");            if(arr[i]>arr[i+1]){                int temp = arr[i];                arr[i] =arr[i+1];                arr[i+1] =temp;            }            System.out.println(Arrays.toString(arr));        }        System.out.println("第二趟");        for(int i=0;i<arr.length-1;i++){            System.out.print("第"+(i+1)+"次");            if(arr[i]>arr[i+1]){                int temp = arr[i];                arr[i] =arr[i+1];                arr[i+1] =temp;            }            System.out.println(Arrays.toString(arr));        }        System.out.println("第三趟");        for(int i=0;i<arr.length-1;i++){            System.out.print("第"+(i+1)+"次");            if(arr[i]>arr[i+1]){                int temp = arr[i];                arr[i] =arr[i+1];                arr[i+1] =temp;            }            System.out.println(Arrays.toString(arr));        }        System.out.println("第四趟");        for(int i=0;i<arr.length-1;i++){            System.out.print("第"+(i+1)+"次");            if(arr[i]>arr[i+1]){                int temp = arr[i];                arr[i] =arr[i+1];                arr[i+1] =temp;            }            System.out.println(Arrays.toString(arr));        }        }            public static void sortFirst(int[] arr){        System.out.println("第一趟");        for(int i=0;i<arr.length-1;i++){            System.out.print("第"+(i+1)+"次");            if(arr[i]>arr[i+1]){                int temp = arr[i];                arr[i] =arr[i+1];                arr[i+1] =temp;            }            System.out.println(Arrays.toString(arr));        }                /*        //第一趟 第一次        System.out.println("第一趟 第一次");        int i=0;        if(arr[i]>arr[i+1]){            int temp = arr[i];            arr[i] =arr[i+1];            arr[i+1] =temp;        }        System.out.println(Arrays.toString(arr));        System.out.println("第一趟 第二次");        i++;        if(arr[i]>arr[i+1]){            int temp = arr[i];            arr[i] =arr[i+1];            arr[i+1] =temp;        }        System.out.println(Arrays.toString(arr));                System.out.println("第一趟 第三次");        i++;        if(arr[i]>arr[i+1]){            int temp = arr[i];            arr[i] =arr[i+1];            arr[i+1] =temp;        }        System.out.println(Arrays.toString(arr));                System.out.println("第一趟 第四次");        i++;        if(arr[i]>arr[i+1]){            int temp = arr[i];            arr[i] =arr[i+1];            arr[i+1] =temp;        }        System.out.println(Arrays.toString(arr));                */    }}
package com.bjsxt.sort.bubble;import java.util.Arrays;public class BubbleSort2 {    /**     * @param args     */    public static void main(String[] args) {        int[] arr ={9,8,7,6,5};                sort(arr);    }    //第二版本,减少每一趟的次数    public static void sort(int[] arr){            int len =arr.length;            for(int j=0;j<len-1;j++){ //趟数                System.out.println("第"+(j+1)+"趟");                for(int i=0;i<len-1-j;i++){ //次数                    System.out.print("第"+(i+1)+"次");                    if(arr[i]>arr[i+1]){                        int temp = arr[i];                        arr[i] =arr[i+1];                        arr[i+1] =temp;                    }                    System.out.println(Arrays.toString(arr));                }            }        }}
package com.bjsxt.sort.bubble;import java.util.Arrays;/** * 最终版本:考虑存在顺序 * @author Administrator * */public class BubbleSort {    /**     * @param args     */    public static void main(String[] args) {                int[] arr ={1,2,9,3,4};        sort1(arr);        System.out.println("==========final============");        arr =new int[]{9,1,2,3,4};        sortFinal(arr);    }    //第二版本,减少每一趟的次数    public static void sortFinal(int[] arr){            boolean sorted= true;            int len =arr.length;            for(int j=0;j<len-1;j++){ //趟数                sorted =true; //假定有序                for(int i=0;i<len-1-j;i++){ //次数                    if(arr[i]>arr[i+1]){                        int temp = arr[i];                        arr[i] =arr[i+1];                        arr[i+1] =temp;                        sorted =false; //假定失败                    }                    System.out.println(Arrays.toString(arr));                }                if(sorted){ //减少趟数                    break;                }            }        }    //第二版本,减少每一趟的次数    public static void sort1(int[] arr){            int len =arr.length;            for(int j=0;j<len-1;j++){ //趟数                System.out.println("第"+(j+1)+"趟");                for(int i=0;i<len-1-j;i++){ //次数                    System.out.print("第"+(i+1)+"次");                    if(arr[i]>arr[i+1]){                        int temp = arr[i];                        arr[i] =arr[i+1];                        arr[i+1] =temp;                    }                    System.out.println(Arrays.toString(arr));                }            }        }}

引用数据类型:

1.整数小数Integer Float Double直接比较基本数据类型的大小

2.比较unicode码之差

3.字符串:

package com.bjsxt.sort.innerType;/** * 内置引用数据类型(常用)的比较 * @author Administrator * */public class Demo01 {    /**     * @param args     */    public static void main(String[] args) {        Integer  a ; //根据基本数据类型大小        Character ch; //根据Unicode编码顺序        String str="abc"; //如果其中一个是例外一个起始开始的子串,返回长度之差        String str2 ="abcd123";  //否则返回第一个不相等的unicode码之差        System.out.println(str.compareTo(str2));        str ="abc";        str2 ="aad";        System.out.println(str.compareTo(str2));                        java.util.Date d ;  //根据日期的长整形数比较    }}

字符串的冒泡:

/**     * @param args     */    public static void main(String[] args) {        String[] arr ={"a","abcd","abc","def"};        //从到小排序 降序        boolean sorted= true;        int len =arr.length;        for(int j=0;j<len-1;j++){ //趟数            sorted =true; //假定有序            for(int i=0;i<len-1-j;i++){ //次数                if(((Comparable)arr[i]).compareTo(arr[i+1])<0){                    String temp = arr[i];                    arr[i] =arr[i+1];                    arr[i+1] =temp;                    sorted =false; //假定失败                }            }            if(sorted){ //减少趟数                break;            }        }                System.out.println(Arrays.toString(arr));    }

时间的冒泡:

/**     * @param args     */    public static void main(String[] args) {        Date[] arr =new Date[3];        arr[0] =new Date();        arr[1] =new Date(System.currentTimeMillis()-1000*60*60);        arr[2] =new Date(System.currentTimeMillis()+1000*60*60);        //降序                //从大到小排序 降序            boolean sorted= true;            int len =arr.length;            for(int j=0;j<len-1;j++){ //趟数                sorted =true; //假定有序                for(int i=0;i<len-1-j;i++){ //次数                    if(((Comparable)arr[i]).compareTo(arr[i+1])<0){                        Date temp = arr[i];                        arr[i] =arr[i+1];                        arr[i+1] =temp;                        sorted =false; //假定失败                    }                }                if(sorted){ //减少趟数                    break;                }            }                        System.out.println(Arrays.toString(arr));    }

 

封装+泛型之后:

package com.bjsxt.sort.innerType;import java.util.Comparator;import java.util.List;/** * 排序 * @author Administrator * */public class Utils {    /**     * List的排序+比较器     * @param list     * @param com     */    public static  <T> void sort(List<T> list,Comparator<T> com){        //第一步:转成数组        Object[] arr =list.toArray();        sort(arr,com);        //第二步:改变容器中对应的值        for(int i=0;i<arr.length;i++){            list.set(i, (T)(arr[i]));        }    }            /**     * 数组的排序 (降序)+Comparator接口     * @param arr     */    public static <T> void sort(Object[] arr,Comparator<T> com){        //从大到小排序 降序            boolean sorted= true;            int len =arr.length;            for(int j=0;j<len-1;j++){ //趟数                sorted =true; //假定有序                for(int i=0;i<len-1-j;i++){ //次数                    if(com.compare((T)arr[i], (T)arr[i+1])<0){                        Object temp = arr[i];                        arr[i] =arr[i+1];                        arr[i+1] =temp;                        sorted =false; //假定失败                    }                }                if(sorted){ //减少趟数                    break;                }            }    }                /**     * 容器排序 (使用泛型方法)     */    public static <T extends Comparable<T>> void sort(List<T> list){        //第一步:转成数组        Object[] arr =list.toArray();        sort(arr);        //第二步:改变容器中对应的值        for(int i=0;i<arr.length;i++){            list.set(i, (T)(arr[i]));        }            }            /**     * 数组排序 (使用泛型方法)     */    public static <T extends Comparable<T>> void sort(T[] arr){        //从大到小排序 降序        boolean sorted= true;        int len =arr.length;        for(int j=0;j<len-1;j++){ //趟数            sorted =true; //假定有序            for(int i=0;i<len-1-j;i++){ //次数                if(((Comparable)arr[i]).compareTo(arr[i+1])<0){                    T temp = arr[i];                    arr[i] =arr[i+1];                    arr[i+1] =temp;                    sorted =false; //假定失败                }            }            if(sorted){ //减少趟数                break;            }        }    }            /**     * 数组的排序 (降序)     * @param arr     */    public static void sort(Object[] arr){        //从大到小排序 降序        boolean sorted= true;        int len =arr.length;        for(int j=0;j<len-1;j++){ //趟数            sorted =true; //假定有序            for(int i=0;i<len-1-j;i++){ //次数                if(((Comparable)arr[i]).compareTo(arr[i+1])<0){                    Object temp = arr[i];                    arr[i] =arr[i+1];                    arr[i+1] =temp;                    sorted =false; //假定失败                }            }            if(sorted){ //减少趟数                break;            }        }            }        }

实例:

package com.bjsxt.sort.innerType;import java.util.ArrayList;import java.util.Arrays;import java.util.Date;import java.util.List;public class Demo04 {    /**     * @param args     */    public static void main(String[] args) {        Date[] arr =new Date[3];        arr[0] =new Date();        arr[1] =new Date(System.currentTimeMillis()-1000*60*60);        arr[2] =new Date(System.currentTimeMillis()+1000*60*60);        Utils.sort(arr); //降序        System.out.println(Arrays.toString(arr));                        //字符串        String[] arr2 ={"a","abcd","abc","def"};        Utils.sort(arr2);        System.out.println(Arrays.toString(arr2));                        System.out.println("==========List排序===========");        //存放容器中        List<String> list =new ArrayList<String>();        list.add("a");        list.add("abcd");        list.add("abc");        list.add("def");        Utils.sort(list);        System.out.println(list);                                        System.out.println("==========使用Comparator 排序数组===============");        arr2 =new String[]{"a","abcd","abc","def"};        Utils.sort(arr2,new StringComp());        System.out.println(Arrays.toString(arr2));                System.out.println("==========List排序+比较器===========");        list =new ArrayList<String>();        list.add("a");        list.add("abcd");        list.add("abc");        list.add("def");        Utils.sort(list,new StringComp());        System.out.println(list);            }}

 

方法而:实现java.util.Comparator接口

 

package com.bjsxt.sort.innerType;/** * 排序规则的业务类 * @author Administrator * */public class StringComp  implements java.util.Comparator<String>{        /**     * 按长度比较大小      * 正数 >     * 负数 <     * 0 ==     */    @Override    public int compare(String o1, String o2) {        int len1 =o1.length();        int len2 =o2.length();                return -(len1-len2);    }    }

 

 

package com.bjsxt.sort.innerType;import java.util.ArrayList;import java.util.Collections;import java.util.List;/** * 使用Collections对容器的比较 * 1、 public static <T> void sort(List<T> list, Comparator<? super T> c)   * 2、public static <T extends Comparable<? super T>> void sort(List<T> list)   * void sort(List<T> list) * @author Administrator * */public class Demo05 {    /**     * @param args     */    public static void main(String[] args) {        List<String> list =new ArrayList<String>();        list.add("a");        list.add("abcd");        list.add("abc");        list.add("def");        Collections.sort(list,new StringComp());        System.out.println(list);                        list =new ArrayList<String>();        list.add("a");        list.add("abcd");        list.add("abc");        list.add("def");        Collections.sort(list);        System.out.println(list);                    }}

新闻条目的排序:

package com.bjsxt.sort.refType;import java.text.SimpleDateFormat;import java.util.Date;/** * 新闻条目实体类 * @author Administrator * */public class NewsItem implements java.lang.Comparable<NewsItem>{    //标题    private String title;    //点击量    private int hits;    //时间    private Date pubTime;    public NewsItem() {    }            public NewsItem(String title, int hits, Date pubTime) {        super();        this.title = title;        this.hits = hits;        this.pubTime = pubTime;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public int getHits() {        return hits;    }    public void setHits(int hits) {        this.hits = hits;    }    public Date getPubTime() {        return pubTime;    }    public void setPubTime(Date pubTime) {        this.pubTime = pubTime;    }    //时间降序 +点击量升序+标题降序    @Override    public int compareTo(NewsItem o) {        int result =0;        //比较 时间        result =-this.pubTime.compareTo(o.pubTime); //降序        if(0==result){ //时间相同            //点击量             result =this.hits-o.hits; //升序            if(0==result){ //点击量相同                 //标题                result=-this.title.compareTo(o.title);//降序            }        }                        return result;    }        @Override    public String toString() {        StringBuilder sb =new StringBuilder();        sb.append("标题:").append(this.title);        sb.append(",时间:").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.pubTime));        sb.append(",点击量:").append(this.hits).append("\n");        return sb.toString();    }    }
package com.bjsxt.sort.refType;import java.util.ArrayList;import java.util.Collections;import java.util.Date;import java.util.List;import com.bjsxt.sort.innerType.Utils;/** * 使用Collections * @author Administrator * */public class NewsItemApp {    /**     * @param args     */    public static void main(String[] args) {        List<NewsItem> news=new ArrayList<NewsItem>();        news.add(new NewsItem("美国后怕了,逃跑了悲剧了",50,new Date(System.currentTimeMillis()-1000*60*60)));        news.add(new NewsItem("中国登上钓鱼岛了,全国欢呼了",100,new Date()));        news.add(new NewsItem("小日本终于听话了,泪流满面笑了",60,new Date(System.currentTimeMillis()-1000*60*60)));        System.out.println("排序前:"+news);                //排序        //Collections.sort(news);            Utils.sort(news);        System.out.println("排序后"+news);                            }}

 

商品的排序:

package com.bjsxt.sort.refType;/** * 实体类 * @author Administrator * */public class Goods {    //商品名称    private String name;    //价格    private double price;    //收藏量    private int fav;    public Goods() {        // TODO Auto-generated constructor stub    }                public Goods(String name, double price, int fav) {        super();        this.name = name;        this.price = price;        this.fav = fav;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public int getFav() {        return fav;    }    public void setFav(int fav) {        this.fav = fav;    }            @Override    public String toString() {        return "商品名:"+name+",收藏量"+this.fav+",价格:"+this.price+"\n";    }}
package com.bjsxt.sort.refType;/** * 按价格排序的业务类 (降序) * @author Administrator * */public class GoodsPriceComp implements java.util.Comparator<Goods> {    @Override    public int compare(Goods o1, Goods o2) {        return -(o1.getPrice()-o2.getPrice()>0?1:(o1.getPrice()==o2.getPrice()?0:-1));    }}
package com.bjsxt.sort.refType;/** * 按收藏量排序的业务类 (升序) * @author Administrator * */public class GoodsFavComp implements java.util.Comparator<Goods> {    @Override    public int compare(Goods o1, Goods o2) {        return o1.getFav()-o2.getFav();    }}
package com.bjsxt.sort.refType;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class GoodsApp {    /**     * @param args     */    public static void main(String[] args) {        List<Goods> list =new ArrayList<Goods>();        list.add(new Goods("老马视频",100,2000));        list.add(new Goods("老高视频",50,2000));        list.add(new Goods("老裴视频",1000,1000));        System.out.println("排序前:"+list);    //    Collections.sort(list,new GoodsPriceComp());        Collections.sort(list,new GoodsFavComp());        System.out.println("排序后:"+list);    }}

 

TreeSet:

注意:在添加数据是排序,数据更改不会影响原来的属性

package com.bjsxt.sort.col;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Person {    private final String name;//名称    private final int handsome;//帅气指数        public Person() {        name =null;        handsome =0;    }    public Person(String name, int handsome) {        super();        this.name = name;        this.handsome = handsome;    }    public String getName() {        return name;    }        public int getHandsome() {        return handsome;    }            @Override    public String toString() {        return "姓名:"+this.name+",帅气指数:"+this.handsome+"\n";    }        }
package com.bjsxt.sort.col;import java.util.Set;import java.util.TreeMap;public class TreeMapDemo {    /**     * @param args     */    public static void main(String[] args) {        Person p1 =new Person("您",100);        Person p2 =new Person("刘德华",1000);        Person p3 =new Person("梁朝伟",1200);        Person p4 =new Person("老裴",50);                TreeMap<Person,String> map =new TreeMap<Person,String>(new java.util.Comparator<Person>(){            @Override            public int compare(Person o1, Person o2) {                return -(o1.getHandsome()-o2.getHandsome());            }                    } );        map.put(p1, "bjsxt");        map.put(p2, "bjsxt");        map.put(p3, "bjsxt");        map.put(p4, "bjsxt");                //查看键        Set<Person> persons =map.keySet();        System.out.println(persons);    }}
package com.bjsxt.sort.col;public class Worker implements java.lang.Comparable<Worker> {    //工种    private String type;    //工资    private double salary;    public Worker() {        // TODO Auto-generated constructor stub    }            public Worker(String type, double salary) {        super();        this.type = type;        this.salary = salary;    }    public String getType() {        return type;    }    public void setType(String type) {        this.type = type;    }    public double getSalary() {        return salary;    }    public void setSalary(double salary) {        this.salary = salary;    }    /**     * 按工资升序     */    @Override    public int compareTo(Worker o) {        return this.salary>o.salary?1:( this.salary==o.salary?0:-1);    }        @Override    public String toString() {        return "工种:"+this.type+",工资:"+this.salary+"\n";    }    }
package com.bjsxt.sort.col;import java.util.TreeSet;/** * 实体类实现Comparable 接口的应用 * @author Administrator * */public class TreeSetDemo2 {    /**     * @param args     */    public static void main(String[] args) {        Worker w1 =new Worker("垃圾回收员",12000);        Worker w2 =new Worker("农民工",8000);        Worker w3 =new Worker("程序猿",5000);                TreeSet<Worker> employees =new TreeSet<Worker>();        employees.add(w1);        employees.add(w2);        employees.add(w3);        System.out.println(employees);            }}

TreeMap:

package com.bjsxt.sort.col;import java.util.Set;import java.util.TreeMap;public class TreeMapDemo {    /**     * @param args     */    public static void main(String[] args) {        Person p1 =new Person("您",100);        Person p2 =new Person("刘德华",1000);        Person p3 =new Person("梁朝伟",1200);        Person p4 =new Person("老裴",50);                TreeMap<Person,String> map =new TreeMap<Person,String>(new java.util.Comparator<Person>(){            @Override            public int compare(Person o1, Person o2) {                return -(o1.getHandsome()-o2.getHandsome());            }                    } );        map.put(p1, "bjsxt");        map.put(p2, "bjsxt");        map.put(p3, "bjsxt");        map.put(p4, "bjsxt");                //查看键        Set<Person> persons =map.keySet();        System.out.println(persons);    }}
package com.bjsxt.sort.col;import java.util.TreeMap;public class TreeMapDemo02 {    /**     * @param args     */    public static void main(String[] args) {        Worker w1 =new Worker("垃圾回收员",12000);        Worker w2 =new Worker("农民工",8000);        Worker w3 =new Worker("程序猿",5000);                TreeMap<Worker,String > employees =new TreeMap<Worker,String >();        employees.put(w1,"bjsxt");        employees.put(w2,"bjsxt");        employees.put(w3,"bjsxt");        System.out.println(employees.keySet());    }}

Collections 的相关方法:

package com.bjsxt.sort.util;import java.util.ArrayList;import java.util.Collections;import java.util.List;/** *1、 binarySearch(List<? extends Comparable<? super T>> list, T key)   容器有序 *2、sort(List<T> list)      sort(List<T> list, Comparator<? super T> c)  *3、reverse(List<?> list)   4、shuffle(List<?> list) 洗牌  5、swap(List<?> list, int i, int j)  * @author Administrator * */public class CollectionsDemo01 {    /**     * @param args     */    public static void main(String[] args) {        List<Integer> cards =new ArrayList<Integer>();        //shuffle 洗牌 模拟斗地主        for(int i=0;i<54;i++){            cards.add(i);         }        //洗牌        Collections.shuffle(cards) ;        //依次发牌        List<Integer> p1 =new ArrayList<Integer>();        List<Integer> p2 =new ArrayList<Integer>();                List<Integer> p3 =new ArrayList<Integer>();        List<Integer> last =new ArrayList<Integer>();        for(int i=0;i<51;i+=3){            p1.add(cards.get(i));            p2.add(cards.get(i+1));            p3.add(cards.get(i+2));        }        //最后三张为底牌        last.add(cards.get(51));        last.add(cards.get(52));        last.add(cards.get(53));                System.out.println("第一个人:"+p1);        System.out.println("第二个人:"+p2);        System.out.println("第三个人:"+p3);        System.out.println("底牌为:"+last);                                            }    //反转    public static void test1(){        List<Integer> list =new ArrayList<Integer>();        list.add(1);        list.add(2);        list.add(3);        list.add(4);        System.out.println(list);        Collections.reverse(list);        System.out.println("反转之后"+list);    }}

Collection_Compare