2、Collections操作(自定义类)的各种实现

1、排序(sort)

要想实现排序,必须实现compare方法,这样Collection才知道是怎样的排序规则。普通的数据类型,比如:int 、String、long等都已经实现了Comparable接口,这个接口里面有两个抽象方法:compare() 和 equals(),而equals在object中定义的,所以所有类都会实现了这个方法,因而就只需要实现compare()即可。所以自定义类也需要自己实现Comparable接口,自己重写里面的compareTo方法

  • 1、bean实现comparable接口,重写compareto方法

      public class CompareTest {
    
          public static void main(String[] args) {
              User user = new User();
              user.age = 11;
    
              User user1 = new User();
              user.age = 5;
    
              User user2 = new User();
              user.age = 8;
    
              User user3 = new User();
              user.age = 3;
    
              List<User> users = new ArrayList<User>();
              users.add(user);
              users.add(user1);
              users.add(user2);
              users.add(user3);
    
              System.out.println(users);
    
              Collections.sort(users);
    
              System.out.println(users);
          }
    
      }
    
      class User implements Comparable<User> {
    
          public String name;
    
          public int age;
    
          public String addr;
    
          public String sortType;
    
          [@Override](https://my.oschina.net/u/1162528)
          public int compareTo(User user) {
              return this.age > user.age ? 1 : -1;   //升序排序升序升序升序
       		//return this.age > user.age ? -1 : 1;   //降序降序降序降序降序
          }
      }
    
  • 2、直接在Collections.sort中传入一个匿名函数

      Collections.sort(fileList, new Comparator<File>() {
          [@Override](https://my.oschina.net/u/1162528)
          public int compare(File leftFile, File rightFile) {
              return leftFile.lastModified() > rightFile.lastModified() ? -1 : 1;
          }
      });
    

compareTo规则总结

返回1表示交换,返回0或者-1表示不交换,所以

int、long、float等字段使用=>return this.age > user.age ? 1 : -1;  //升序

	return this.age > user.age ? -1 : 1;  //降序

String类型字段使用=>return this.name.compareTo(user.name);  //升序

   return -this.name.compareTo(user.name);  //降序

2、是否存在的判断(contains,containsAll)

这个方法调用自定义类中的equals方法进行比较,所以需要重写equals方法

public class ContainsTest{

    public static void main(String[] args) {
        UserBean userBean1 = new UserBean("1");
        UserBean userBean2 = new UserBean("1");

        LinkedList<UserBean> userBeenList = new LinkedList<>();
        userBeenList.add(userBean1);
        System.out.println(userBeenList.contains(userBean2));
    }

}

class UserBean {
    private String personId;

    public UserBean(String personId){
        this.personId = personId;
    }

    public String getPersonId() {
        return personId;
    }

    public void setPersonId(String personId) {
        this.personId = personId;
    }

    [@Override](https://my.oschina.net/u/1162528)
    public boolean equals(Object obj){  
		//这里一定是Object对象,因为equals方法是在Object那里继承过来的,
		//方法的参数要和父类一致,否则不算重写
        if(obj instanceof UserBean){
            UserBean otherUser = (UserBean) obj;
            if (this.personId == otherUser.personId) {
                return true;
            }else {
                return false;
            }
        }
        return false;
    }
}

转载于:https://my.oschina.net/liufukin/blog/2221785

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值