通过枚举控制比较TreeSet内容排序(实现接口comparator);随机生成一个汉字

这篇博客展示了如何利用枚举和Comparator接口来控制TreeSet中Game对象的排序规则,根据材质、颜色、形状和大小进行排序。同时,还提供了一个方法用于随机生成一个汉字。
摘要由CSDN通过智能技术生成

随机生成一个汉字

/**
* 随机生成一个汉字
* @return
* @throws UnsupportedEncodingException
*/
public static String createStr() throws UnsupportedEncodingException {
String str = null;
int hightPos, lowPos; // 定义高低位
Random random = new Random();
hightPos = (176 + Math.abs(random.nextInt(39)));// 获取高位值
lowPos = (161 + Math.abs(random.nextInt(93)));// 获取低位值
byte[] b = new byte[2];
b[0] = (new Integer(hightPos).byteValue());
b[1] = (new Integer(lowPos).byteValue());
str = new String(b, "GBk");// 转成中文
return str;
}

排序
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;


class Game{
private String materia;
public String getMateria() {
return materia;
}
public void setMateria(String materia) {
this.materia = materia;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getShape() {
return shape;
}
public void setShape(String shape) {
this.shape = shape;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
private String color;
private String shape;
private int size;
public Game(String materia,String color,String shape,int size){
this.materia=materia;
this.color=color;
this.shape=shape;
this.size=size;
}
@Override
public String toString(){
return materia+">"+color+">"+shape+">"+size;
}


}
/**
 * 裁判类又称比较器.为了更好控制比较内容用了枚举
 * @author lenovo
 *
 */
class K1 implements Comparator{
public enum materiaEnum {//木材好于钢材好于合金好于塑料
wood,steel,alloy,plastic;
}

public int compare(Object o1, Object o2) {
//只有game类型才有比较的意义,如果不是该类型就让它相等不添加
if ((o1 instanceof Game)&&(o2 instanceof Game)) {
Game g1=(Game)o1;
Game g2=(Game)o2;
int x=0;
for (int i = 0; i < materiaEnum.values().length; i++) {
if (g1.getMateria().equals(materiaEnum.values()[i].toString())) {
x=i;
break;
}
}


int y=0;
for (int i = 0; i <materiaEnum.values().length; i++) {
if (g2.getMateria().equals(materiaEnum.values()[i].toString())) {
y=i;
break;
}
}

int m=x-y;
if (m!=0) {
return m;
}
else {
int c=g1.getColor().compareTo(g2.getColor());
if (c!=0) {
return c;
}
else {
int s=g1.getShape().compareTo(g2.getShape());
if (s!=0)return s;
return g1.getSize()-g2.getSize();
}
}
}
return 0;
}

}
public class TreeSetGame {


/**
* @param args
*/
@SuppressWarnings("unchecked")
public static void main(String[] args) {
Set gSet=new TreeSet<Game>(new K1());
gSet.add(new Game("wood","red","rectangle",1));
gSet.add(new Game("steel","red","rectangle",2));
gSet.add(new Game("wood","red","rectangle",3));
gSet.add(new Game("plastic","red","rectangle",3));
System.out.println(gSet);
}


}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值