Java中equals和equal是两个不同的方法,它们的作用也有所不同。
equals方法是Object类中定义的一个方法,用于比较两个对象是否相等。在默认情况下,它比较的是两个对象的地址是否相等,即它们是否指向同一个内存地址。但是,我们可以通过重写equals方法来自定义相等的规则,例如通过比较两个对象的属性值是否相等来判断它们是否相等。
而equal是一个 *** 作符,用于比较两个基本数据类型的值是否相等。它可用于比较boolean、char、byte、short、int、long、float和double类型的值。当两个基本数据类型的值相等时,equal返回true,否则返回false。
需要注意的是,如果我们在比较两个字符串是否相等时使用equal *** 作符,可能会得到错误的结果。这是因为equal *** 作符比较的是两个字符串对象的地址是否相等,而不是它们的内容是否相等。如果要比较两个字符串对象的内容是否相等,应该使用equals方法。
在Java中,equals方法和== *** 作符是不同的,== *** 作符比较的是两个对象的地址是否相等,而equals方法比较的是两个对象的内容是否相等。因此,我们应该根据实际情况选择使用哪种方法来比较两个对象或两个基本数据类型的值。
需要注意的是,当我们重写equals方法时,也需要同时重写hashCode方法。这是因为在使用HashSet、HashMap等集合类时,它们是根据对象的hashCode值来进行存储和查找的。如果两个对象的equals方法返回true,但它们的hashCode值不同,那么它们在HashSet、HashMap中将被认为是不同的对象,这可能会导致一些问题。
方法一:实现Comparable接口排序package collsortcomparable;
package comcvicsesortcomparable;
public class Cat implements Comparable<Cat> {
private int age;
private String name;
public Cat(int age, String name) {
thisage = age;
thisname = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
thisage = age;
}
public int compareTo(Cat o) {
return thisgetAge() - ogetAge();
}
}
通过实现Comparable接口实现个性化排序测试。排序测试,Collectionsort(list)升序排列Collectionssort(list, CollectionsreverseOrder());降序排列;Collectionsreverse(list);反转排序,先输出列表最后一个元素
public class TestComparable {
public static void main(String args[]) {
test();
test2();
}
public static void test() {
List<Cat> listCat1 = new ArrayList<Cat>();
Cat cat1 = new Cat(34, "hehe");
Cat cat2 = new Cat(12, "haha");
Cat cat3 = new Cat(23, "leizhimin");
Cat cat4 = new Cat(13, "lavasoft");
listCat1add(cat1);
listCat1add(cat2);
listCat1add(cat3);
Systemoutprintln("调用Collectionssort(List<T> list)listCat2升序排序:");
Collectionssort(listCat1);
Systemoutprintln("降序排列元素:");
Collectionssort(listCat1, CollectionsreverseOrder());
Systemoutprintln("Collectionsreverse 从列表中最后一个元素开始输出:");
Collectionsreverse(listCat1);
}
/
针对数组的排序
/
public static void test2() {
String[] strArray = new String[] { "z", "a", "C" };
Systemoutprintln("数组转换为列表");
List<String> list = ArraysasList(strArray);
Systemoutprintln("顺序排序列表");
Collectionssort(list);
Systemout
println("按String实现的Comparator对象StringCASE_INSENSITIVE_ORDER排序----");
Collectionssort(list, StringCASE_INSENSITIVE_ORDER);
Systemoutprintln("倒序排序列表");
Collectionssort(list, CollectionsreverseOrder());
}
}
方法二:实现Comparator接口排序
public class Person {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
thisage = age;
}
}
实现了Comparator接口,重写了compare方法
import javautilComparator;
public class PersonComparator implements Comparator<Person> {
public int compare(Person o1, Person o2) {
return o1getAge() - o2getAge();
}
}
测试方法
public class TestComparator {
public static void main(String args[]) {
test1();
}
public static void test1() {
Systemoutprintln("升序排序测试:");
List<Person> listPerson = new ArrayList<Person>();
Person person1 = new Person(34, "lavasoft");
Person person2 = new Person(12, "lavasoft");
Person person3 = new Person(23, "leizhimin");
Person person4 = new Person(13, "sdg");
listPersonadd(person1);
listPersonadd(person2);
listPersonadd(person3);
Comparator<Person> ascComparator = new PersonComparator();
Systemoutprintln("排序后集合为:");
// 利用Collections类静态工具方法对集合List进行排序
Collectionssort(listPerson, ascComparator);
Systemoutprintln("\n降序排序测试:");
// 从升序排序对象产生一个反转(降序)的排序对象
Comparator<Person> descComparator = Collections
reverseOrder(ascComparator);
Systemoutprintln("利用反转后的排序接口对象对集合List排序并输出:");
Collectionssort(listPerson, descComparator);
outCollection(listPerson);
}
}
可以使用集合吗?使用数组比较麻烦,可以将产生的随机数转为Integer对象存入集合中,然后使用迭代器对集合进行遍历,取出数字对象转为字符形式,进行排序.然后存入一个新的集合中,再使用迭代器进行遍历,将数字打印出来.
sort(T[] a, Comparator< super T> c)
用这个函数,自定义comparator函数实现最后一个值排序
import javautilArrays;import javautilComparator;
public class TestDengCha {
public static void main(String[] agrs) {
Student[] s = new Student[5];
s[0] = new Student("西西", 59, 78, 80);
s[1] = new Student("小亿", 67, 78, 70);
s[2] = new Student("咚咚", 23, 84, 77);
s[3] = new Student("李济", 69, 78, 73);
s[4] = new Student("冰芳", 76, 74, 71);
Arrayssort(s, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if (s1 != null && s2 != null) {
return s1getEnglish() > s2getEnglish() 1 : (s1getEnglish() == s2getEnglish() 0 : -1);
}
return 0;
}
});
Systemoutprintln(ArraystoString(s));
}
}
class Student {
private String name;
private int chinese;
private int math;
private int english;
Student(String name, int chinese, int math, int english) {
thisname = name;
thischinese = chinese;
thisenglish = english;
}
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public int getChinese() {
return chinese;
}
public void setChinese(int chinese) {
thischinese = chinese;
}
public int getMath() {
return math;
}
public void setMath(int math) {
thismath = math;
}
public int getEnglish() {
return english;
}
public void setEnglish(int english) {
thisenglish = english;
}
@Override
public String toString() {
return "姓名:" + name + " 语文" + chinese + " 数学" + math + " 英语" + english;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)