【TreeSet】1.排行

package org.example.testTreeMap;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;

import java.util.SortedSet;
import java.util.TreeSet;

public class Main3 {
	public static void main(String[] args) {
		// 1.模拟内存数据序列化到db中,榜单最大2人
		TreeSet<RankItem> set = new TreeSet<>();
		set.add(new RankItem(1L, "jn", 80));
		if(set.size() > 2){
			set.pollLast();
		}

		set.add(new RankItem(2L, "jn2", 70));
		if(set.size() > 2){
			set.pollLast();
		}

		set.add(new RankItem(3L, "jn3", 80));
		if(set.size() > 2){
			set.pollLast();
		}

		set.add(new RankItem(4L, "jn4", 60));
		if(set.size() > 2){
			set.pollLast();
		}
		
		String rankDataStr = JSON.toJSONString(set);


		// 2.模拟db中load出来排行榜数据
		// 反序列化(注意parseObject中需要使用TypeReference,而不是直接Set.class,不然得到的是JSONObject类型)
		TreeSet<RankItem> memRankTreeSet = JSON.parseObject(rankDataStr, new TypeReference<>() {
		});

		System.out.println(memRankTreeSet);

		// 查找排行榜
		SortedSet<RankItem> rankItems = memRankTreeSet.subSet(new RankItem(0L, "", 100), new RankItem(0L, "", 71));
		System.out.println(rankItems);
	}
}

/*
[RankItem(uid=3, name=jn3, score=80), RankItem(uid=1, name=jn, score=80), RankItem(uid=2, name=jn2, score=70), RankItem(uid=4, name=jn4, score=60)]
 */

RankIten.java

package org.example.testTreeMap;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Objects;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class RankItem implements Comparable<RankItem> {
	private Long uid;
	private String name;
	private int score;

	@Override
	public int compareTo(RankItem o) {
		if (this.getScore() != o.getScore()) {
			return o.getScore() - this.getScore();
		}
		return o.getName().compareTo(this.getName());
	}

	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (!(o instanceof RankItem)) return false;
		RankItem rankItem = (RankItem) o;
		return Objects.equals(getUid(), rankItem.getUid());
	}

	@Override
	public int hashCode() {
		return Objects.hash(getUid());
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值