java集合判断对象相等和比较大小的方法

本文介绍了在Java集合中判断对象相等和比较大小的方法,包括使用equals和hashCode方法来判断对象是否相同,以及通过实现Comparable接口的compareTo方法进行对象的比较。此外,还提到了在集合遍历时使用迭代器iterator的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题:java集合判断对象相等和比较大小的方法

  1. 判断Java集合对象相同:
    (1)判断equals是否返回true;
    (2)判断hascode是否相等;
package edu.xalead;

import java.util.HashSet;


public class Test {
   /**
    * 相同的哈希码,对象相同
    */
   public static void main(String[] args) {

      HashSet q = new HashSet();
      q.add("hello");
      q.add("hello");
      q.add("hello");
      System.out.println(q.size());

      q = new HashSet();
      q.add(13);
      q.add(13);
      q.add(13);
      System.out.println(q.size());

      q = new HashSet();
      q.add(new Student("KAAK",143536,'女'));
      q.add(new Student("KAAK",143536,'女'));
      q.add(new Student("KAAK",143536,'女'));
      System.out.println(q.size());

      HashSet w = new HashSet();
      w.add(new Student1("jiaja",143536,'男'));
      w.add(new Student1("jiaja",143536,'男'));
      w.add(new Student1("jiaja",143536,'男'));
      System.out.println(w);
      System.out.println(w.size());

   }

//   c = new HashSet();
//        c.add(new Student(222,"旺达"));
//        c.add(new Student(222,"旺达"));
//        c.add(new Student(222,"旺达"));
//        System.out.println(c.size())

}

在Student1未继承Object或未实现接口Comparable时,w.size=3,因为每new一次Student1对象,地址不同.

测试结果:

package edu.xalead;

import java.util.Objects;

public class Student1 extends Object {
    private String name;
    private int id;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student1 student1 = (Student1) o;
        return id == student1.id &&
                sex == student1.sex &&
                Objects.equals(name, student1.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, id, sex);
    }

    private char sex;

//    @Override
//    public boolean equals(Object obj) {
//        if (obj instanceof Student1){   //obj是Student1的示例
//            Student1 s = (Student1) obj;
//            if(s.id == this.id &&
//                    s.name.equals(this.name)&&
//                    s.sex==this.sex)
//            return true;
//    }
//        return false;
//}
//
//    public  int hashCode(){
//        return new Integer(id).hashCode() + name.hashCode() + new Character(sex).hashCode();
//    }

    @Override
    public String toString() {
        return "Student1{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", sex=" + sex +
                '}';
    }

    public Student1(String name, int id, char sex) {
        this.name = name;
        this.id = id;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }


}

2.java集合比较大小:
(1) 继承接口Comparable的compareTo方法.

package edu.xalead;

import java.util.Objects;

public class Student implements  Comparable{

    private String name;
    private int id;
    private char sex;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", sex=" + sex +
                '}';
    }

    public Student(String name, int id, char sex) {
        this.name = name;
        this.id = id;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

//    public  boolean equals(Object obj){
//        if(obj instanceof Student){   //前面的引用是否是后面对象的示例
//            Student s  = (Student) obj;
//            if(s.id==this.id
//                    && s.name.equals(this.name)  // 字符串也是对象,对象比较用equals
//                    && s.sex==this.sex)
//                return true;
//        }
//        return false;
//    }
//    public  int hascode(){
//        return new Integer(id).hashCode()
//                + name.hashCode() +
//                new Character(sex).hashCode();
    @Override
    //equals值返回true
    public boolean equals(Object o) {   //比较对象内容是否相同
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return id == student.id &&
                sex == student.sex &&
                Objects.equals(name, student.name);
    }

    @Override
    //hashCode 相同
    public int hashCode() {
        return Objects.hash(name, id, sex);
    }

    @Override //排序的接口   compareTo
    public int compareTo(Object o) {  //对象类型引用  o是Object类型的 可引用调用自己的方法
          if(o instanceof  Student){  //  o是student的实例化
              Student s = (Student) o;  //强行类型转换
//              if(this.id >s.id) {  //this是指向对象的
//                  return 1;
//              } else if (this.id <s.id){
//                  return -1;
//              }
//              return 0;
              if(this.id >s.id) {
                  return -1;
              } else if (this.id <s.id){
                  return 1;
              }
              return 0;
          }
              throw  new RuntimeException("类型不匹配无法比较大小");//沿调用栈向上传  抛出异常

        //return 0;//自己==传进来的对象
    }
}

测试:

package edu.xalead;

import java.util.Iterator;
import java.util.TreeSet;

public class Test2 {
    public static void main(String[] args) {

        TreeSet s = new TreeSet();  //放进去的元素已排好序

        s.add(19);
        s.add(16);
        s.add(14);
        s.add(15);
     //迭代
        Iterator iter = s.iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
        s = new TreeSet();
        s.add(new Student("hany",143554,'男'));
        s.add(new Student("gdhbf",546465,'女'));
        s.add(new Student("fegdvff",353475,'男'));
        iter = s.iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }

    }
}

测试结果:
通过id降序输出
Set和Collection遍历常用迭代器iterator

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值