广州微信网站建设公司哪家好,十堰秦楚网公众号,电网站建设用地赔偿,最牛餐饮营销手段一.java中的compareto方法
1.返回参与比较的前后两个字符串的asc码的差值#xff0c;如果两个字符串首字母不同#xff0c;则该方法返回首字母的asc码的差值
String a1 “a”; String a2 “c”; System.out.println(a1.compareTo(a2));//结果为-2
2.即参与比较的两个字符…一.java中的compareto方法
1.返回参与比较的前后两个字符串的asc码的差值如果两个字符串首字母不同则该方法返回首字母的asc码的差值
String a1 “a”; String a2 “c”; System.out.println(a1.compareTo(a2));//结果为-2
2.即参与比较的两个字符串如果首字符相同则比较下一个字符直到有不同的为止返回该不同的字符的asc码差值
String a1 “aa”; String a2 “ad”; System.out.println(a1.compareTo(a2));//结果为-3 3.如果两个字符串不一样长可以参与比较的字符又完全一样则返回两个字符串的长度差值
String a1 “aa”; String a2 “aa12345678”; System.out.println(a1.compareTo(a2));//结果为-8 4.返回为正数表示a1a2, 返回为负数表示a1a2, 返回为0表示a1a2
5.数字类型不能用compareTont跟int的比较不能用compareTo方法,直接用大于() 小于() 或者 等于() 不等于(!)来比较即可
int num1 4; int num2 5; num1.compareTo(num2);//Cannot invoke compareTo(int) on the primitive type int 你可以先把你的int型变量转换成String再进行比较
复制代码 int num1 4; int num2 5; //parse int to String System.out.println((num1).compareTo(num2));//-1System.out.println(new Integer(num1).toString(). compareTo(new Integer(num2).toString()));//-1System.out.println(String.valueOf(num1).compareTo(String.valueOf(num2)));//-1复制代码 6.compareToIgnoreCase忽略大小写
不考虑大小写按字典顺序比较两个字符串。此方法返回一个整数它的正负号是调用 compareTo 的正负号调用时使用了字符串的规范化版本其大小写差异已通过对每个字符调用 Character.toLowerCase(Character.toUpperCase(character)) 得以消除。 注意此方法不 考虑语言环境因此可能在某些特定的语言环境中产生不理想的排序。java.text 包提供 Collators 来完成语言环境敏感的排序。
7.int型可以直接比较所以没有用到compareTo比较如果声明的是Date、String、Integer、或者其他的可以直接使用compareTo比较 Integer n1 5;Integer n2 6;System.out.println(n1.compareTo(n2));//-1 二. Comparable接口中的compareTo
compareTo方法内必须做非空判断规范问题当然int类型就不用了。
注意事项
1、模型必须实现Comparable接口
2、Collection.sort(list)会自动调用compareTo,如果没有这句list是不会排序的也不会调用compareTo方法
3、如果是数组则用Arrays.sort(a)方法
注意要非空判断这里实例就不判断了
复制代码 private int bookId;
private String bookName;private int bookPrice;Override
public int compareTo(Book o) {// TODO Auto-generated method stub//return this.bookPrice-o.bookPrice;//按价格排序 升序
//return o.bookPrice-this.bookPrice;//按价格排序 降序//return this.bookName.compareTo(o.bookName);//按书名排序 升序//先按 id 再按价格 最后按书名排序 升序int result this.bookId - o.bookId;if(result 0){result this.bookPrice - o.bookPrice;}if(result 0){result this.bookName.compareTo(o.bookName);} return result;}复制代码 复制代码 package com.my.test.compare;
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List;
public class TestCompare { public static void main(String[] args) { Book b1 new Book(1, “语文”, 20); Book b2 new Book(2, “数学”, 10); Book b3 new Book(5, “英语”, 10); Book b4 new Book(4, “化学”, 50); Book b5 new Book(3, “化学”, 10); //Book b6 null;//不能为nullCollections.sort调用compareTo会报空指针异常 ListBook books new ArrayList(); books.add(b1);books.add(b2);books.add(b3);books.add(b4);books.add(b5);System.out.println(Collections 排序前);for (Book book : books) {System.out.println(book);}Collections.sort(books);System.out.println(Collections 排序后);for (Book book : books) {System.out.println(book);}Book[] b new Book[5];System.out.println(b.length);b[0] b1;b[1] b2;b[2] b3;b[3] b4;b[4] b5;System.out.println(Arrays 排序前 );for (Book book : b) {System.out.println(book);}Arrays.sort(b);System.out.println(Arrays 排序后 );for (Book book : b) {System.out.println(book);}}} 复制代码 在应用中我们为了好判断状态一般处理为
复制代码 if(this.bookIdo.bookId){ return -1; }else if(this.bookIdo.bookId){ return 1; }else{ return 0; } 复制代码
返回值为 10.-1
三。 Comparator接口
源码
复制代码 FunctionalInterface public interface Comparator { // 核心方法用来比较两个对象如果o1小于o2返回负数等于o2返回0大于o2返回正数 int compare(T o1, T o2); // 好像很少用到一般都用对象自带的equals boolean equals(Object obj);
/**-----------下面的都是JDK1.8新增的接口挑几个放进去----------*/
//返回反向排序比较器 default Comparator reversed() { return Collections.reverseOrder(this); } //根据名字知道先进行compare比较后再进行一次比较 default Comparator thenComparing(Comparator? super T other) { Objects.requireNonNull(other); return (Comparator Serializable) (c1, c2) - { int res compare(c1, c2); return (res ! 0) ? res : other.compare(c1, c2); }; } //对int类型的key进行比较 public static Comparator comparingInt(ToIntFunction? super T keyExtractor) { Objects.requireNonNull(keyExtractor); return (Comparator Serializable) (c1, c2) - Integer.compare(keyExtractor.applyAsInt(c1), keyExtractor.applyAsInt(c2)); } //返回正常顺序的比较器 public static T extends Comparable? super T Comparator naturalOrder() { return (Comparator) Comparators.NaturalOrderComparator.INSTANCE; } } 复制代码 一起来看一下如何使用先来看一下JDK1.8以前的用法
复制代码 Collections.sort(books,new Comparator() { Overridepublic int compare(Book o1, Book o2) {// TODO Auto-generated method stubreturn o1.getBookPrice() - o2.getBookPrice();}});复制代码 或者创建一个比较器
复制代码 package com.my.test.compare;
import java.util.Comparator;
public class SimpleCompator implements Comparator {
Override
public int compare(Book o1, Book o2) {// TODO Auto-generated method stubreturn o1.getBookPrice() -o2.getBookPrice();
}} 复制代码
Collections.sort(books,new SimpleCompator()); JDK1.8以前的用法要自己手动实现Comparator接口然后调用Collections.sort()传入实现类来完成排序非常麻烦而JDK1.8则相对来说简单了很多 Collections.sort(books,(Book a, Book b) - { return a.getBookPrice()-b.getBookPrice(); });或者可以简单的写为 Collections.sort(books,(Book a, Book b) - a.getBookPrice()-b.getBookPrice());甚至我们可以不使用Collections.sort
books.sort((Book a, Book b) - a.getBookPrice()-b.getBookPrice() ); 详见http://www.manongjc.com/article/8005.html
compator 在 treeMap 中的 应用基于key的排序
treeMap默认的是基于key的从小到大 的排列
自定义排序也是基于key的如果key object类型 可以自定义各种排序 TreeMapString, Person treeMap new TreeMap((String a,String b)- b.compareTo(a));//降序TreeMapString, Person treeMap new TreeMap((String a,String b)- a.compareTo(b));//升序TreeMap的按value排序转换成entry list 然后排序汉字是按ascii码排序的不是汉语拼音
复制代码 Person p1 new Person(1, “A小红”); Person p2 new Person(5, “D赵明”); Person p3 new Person(2, “W孙宇”); Person p4 new Person(9, “C黎明”); TreeMapString, Person treeMap new TreeMap();treeMap.put(45, p1);treeMap.put(12, p2);treeMap.put(85, p3);treeMap.put(33, p4);ListMap.EntryString, Person entries new ArrayList(treeMap.entrySet());Collections.sort(entries,(Map.EntryString, Person e1, Map.EntryString, Person e2) - ((Person) e1.getValue()).getPersonName().compareTo(((Person) e2.getValue()).getPersonName()));System.out.println(按名字顺序排列);for (EntryString, Person entry : entries) {System.out.println(entry.getValue());}一.java中的compareto方法
1.返回参与比较的前后两个字符串的asc码的差值如果两个字符串首字母不同则该方法返回首字母的asc码的差值
String a1 “a”; String a2 “c”; System.out.println(a1.compareTo(a2));//结果为-2
2.即参与比较的两个字符串如果首字符相同则比较下一个字符直到有不同的为止返回该不同的字符的asc码差值
String a1 “aa”; String a2 “ad”; System.out.println(a1.compareTo(a2));//结果为-3 3.如果两个字符串不一样长可以参与比较的字符又完全一样则返回两个字符串的长度差值
String a1 “aa”; String a2 “aa12345678”; System.out.println(a1.compareTo(a2));//结果为-8 4.返回为正数表示a1a2, 返回为负数表示a1a2, 返回为0表示a1a2
5.数字类型不能用compareTont跟int的比较不能用compareTo方法,直接用大于() 小于() 或者 等于() 不等于(!)来比较即可
int num1 4; int num2 5; num1.compareTo(num2);//Cannot invoke compareTo(int) on the primitive type int 你可以先把你的int型变量转换成String再进行比较
复制代码 int num1 4; int num2 5; //parse int to String System.out.println((num1).compareTo(num2));//-1System.out.println(new Integer(num1).toString(). compareTo(new Integer(num2).toString()));//-1System.out.println(String.valueOf(num1).compareTo(String.valueOf(num2)));//-1复制代码 6.compareToIgnoreCase忽略大小写
不考虑大小写按字典顺序比较两个字符串。此方法返回一个整数它的正负号是调用 compareTo 的正负号调用时使用了字符串的规范化版本其大小写差异已通过对每个字符调用 Character.toLowerCase(Character.toUpperCase(character)) 得以消除。 注意此方法不 考虑语言环境因此可能在某些特定的语言环境中产生不理想的排序。java.text 包提供 Collators 来完成语言环境敏感的排序。
7.int型可以直接比较所以没有用到compareTo比较如果声明的是Date、String、Integer、或者其他的可以直接使用compareTo比较 Integer n1 5;Integer n2 6;System.out.println(n1.compareTo(n2));//-1 二. Comparable接口中的compareTo
compareTo方法内必须做非空判断规范问题当然int类型就不用了。
注意事项
1、模型必须实现Comparable接口
2、Collection.sort(list)会自动调用compareTo,如果没有这句list是不会排序的也不会调用compareTo方法
3、如果是数组则用Arrays.sort(a)方法
注意要非空判断这里实例就不判断了
复制代码 private int bookId;
private String bookName;private int bookPrice;Override
public int compareTo(Book o) {// TODO Auto-generated method stub//return this.bookPrice-o.bookPrice;//按价格排序 升序
//return o.bookPrice-this.bookPrice;//按价格排序 降序//return this.bookName.compareTo(o.bookName);//按书名排序 升序//先按 id 再按价格 最后按书名排序 升序int result this.bookId - o.bookId;if(result 0){result this.bookPrice - o.bookPrice;}if(result 0){result this.bookName.compareTo(o.bookName);} return result;}复制代码 复制代码 package com.my.test.compare;
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List;
public class TestCompare { public static void main(String[] args) { Book b1 new Book(1, “语文”, 20); Book b2 new Book(2, “数学”, 10); Book b3 new Book(5, “英语”, 10); Book b4 new Book(4, “化学”, 50); Book b5 new Book(3, “化学”, 10); //Book b6 null;//不能为nullCollections.sort调用compareTo会报空指针异常 ListBook books new ArrayList(); books.add(b1);books.add(b2);books.add(b3);books.add(b4);books.add(b5);System.out.println(Collections 排序前);for (Book book : books) {System.out.println(book);}Collections.sort(books);System.out.println(Collections 排序后);for (Book book : books) {System.out.println(book);}Book[] b new Book[5];System.out.println(b.length);b[0] b1;b[1] b2;b[2] b3;b[3] b4;b[4] b5;System.out.println(Arrays 排序前 );for (Book book : b) {System.out.println(book);}Arrays.sort(b);System.out.println(Arrays 排序后 );for (Book book : b) {System.out.println(book);}}} 复制代码 在应用中我们为了好判断状态一般处理为
复制代码 if(this.bookIdo.bookId){ return -1; }else if(this.bookIdo.bookId){ return 1; }else{ return 0; } 复制代码
返回值为 10.-1
三。 Comparator接口
源码
复制代码 FunctionalInterface public interface Comparator { // 核心方法用来比较两个对象如果o1小于o2返回负数等于o2返回0大于o2返回正数 int compare(T o1, T o2); // 好像很少用到一般都用对象自带的equals boolean equals(Object obj);
/**-----------下面的都是JDK1.8新增的接口挑几个放进去----------*/
//返回反向排序比较器 default Comparator reversed() { return Collections.reverseOrder(this); } //根据名字知道先进行compare比较后再进行一次比较 default Comparator thenComparing(Comparator? super T other) { Objects.requireNonNull(other); return (Comparator Serializable) (c1, c2) - { int res compare(c1, c2); return (res ! 0) ? res : other.compare(c1, c2); }; } //对int类型的key进行比较 public static Comparator comparingInt(ToIntFunction? super T keyExtractor) { Objects.requireNonNull(keyExtractor); return (Comparator Serializable) (c1, c2) - Integer.compare(keyExtractor.applyAsInt(c1), keyExtractor.applyAsInt(c2)); } //返回正常顺序的比较器 public static T extends Comparable? super T Comparator naturalOrder() { return (Comparator) Comparators.NaturalOrderComparator.INSTANCE; } } 复制代码 一起来看一下如何使用先来看一下JDK1.8以前的用法
复制代码 Collections.sort(books,new Comparator() { Overridepublic int compare(Book o1, Book o2) {// TODO Auto-generated method stubreturn o1.getBookPrice() - o2.getBookPrice();}});复制代码 或者创建一个比较器
复制代码 package com.my.test.compare;
import java.util.Comparator;
public class SimpleCompator implements Comparator {
Override
public int compare(Book o1, Book o2) {// TODO Auto-generated method stubreturn o1.getBookPrice() -o2.getBookPrice();
}} 复制代码
Collections.sort(books,new SimpleCompator()); JDK1.8以前的用法要自己手动实现Comparator接口然后调用Collections.sort()传入实现类来完成排序非常麻烦而JDK1.8则相对来说简单了很多 Collections.sort(books,(Book a, Book b) - { return a.getBookPrice()-b.getBookPrice(); });或者可以简单的写为 Collections.sort(books,(Book a, Book b) - a.getBookPrice()-b.getBookPrice());甚至我们可以不使用Collections.sort
books.sort((Book a, Book b) - a.getBookPrice()-b.getBookPrice() ); 详见http://www.manongjc.com/article/8005.html
compator 在 treeMap 中的 应用基于key的排序
treeMap默认的是基于key的从小到大 的排列
自定义排序也是基于key的如果key object类型 可以自定义各种排序 TreeMapString, Person treeMap new TreeMap((String a,String b)- b.compareTo(a));//降序TreeMapString, Person treeMap new TreeMap((String a,String b)- a.compareTo(b));//升序TreeMap的按value排序转换成entry list 然后排序汉字是按ascii码排序的不是汉语拼音
复制代码 Person p1 new Person(1, “A小红”); Person p2 new Person(5, “D赵明”); Person p3 new Person(2, “W孙宇”); Person p4 new Person(9, “C黎明”); TreeMapString, Person treeMap new TreeMap();treeMap.put(45, p1);treeMap.put(12, p2);treeMap.put(85, p3);treeMap.put(33, p4);ListMap.EntryString, Person entries new ArrayList(treeMap.entrySet());Collections.sort(entries,(Map.EntryString, Person e1, Map.EntryString, Person e2) - ((Person) e1.getValue()).getPersonName().compareTo(((Person) e2.getValue()).getPersonName()));System.out.println(按名字顺序排列);for (EntryString, Person entry : entries) {System.out.println(entry.getValue());}