Discuss / Java / daka
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Queue<User> q = new PriorityQueue<>(new UserComparator());
		// 添加3个元素到队列:
		q.offer(new User("Bob", "A1"));
		q.offer(new User("Alice", "A3"));
		q.offer(new User("Alice", "A2"));
		q.offer(new User("Alice", "A112"));
		q.offer(new User("Boss", "V1"));
		q.offer(new User("Boss", "A10"));
		q.offer(new User("Boss", "A999"));
		q.offer(new User("Boss", "A88"));
		System.out.println(q.poll()); // Boss/V1
		System.out.println(q.poll()); // Bob/A1
		System.out.println(q.poll()); // Alice/A2
		System.out.println(q.poll()); // Alice/A2
		System.out.println(q.poll()); // Alice/A2
		System.out.println(q.poll()); // Alice/A2
		System.out.println(q.poll()); // Alice/A2
		System.out.println(q.poll()); // Alice/A2
		System.out.println(q.poll()); // null,因为队列为空
	}
}

class UserComparator implements Comparator<User> {
	public int compare(User u1, User u2) {
		// 如果两人的号都是A开头或者都是V开头,比较号的大小:
		if (u1.number.charAt(0) == u2.number.charAt(0)) {
			// 相同的字母开头,截取后面的值
			int v1 = u1.number.length();
			int v2 = u2.number.length();
			String n1 = u1.number.substring(1, v1);
			String n2 = u2.number.substring(1, v2);
			// 负值,n1排前面
			return Integer.parseInt(n1) - Integer.parseInt(n2);
		}
		if (u1.number.charAt(0) == 'V') {
			// u1的号码是V开头,优先级高:
			return -1;
		} else {
			return 1;
		}
	}
}

class User {
	public final String name;
	public final String number;

	public User(String name, String number) {
		this.name = name;
		this.number = number;
	}

	public String toString() {
		return name + "/" + number;
	}
}

Joker.fu_95

#2 Created at ... [Delete] [Delete and Lock User]
Integer n1 = Integer.valueOf(u1.number.substring(1));
Integer n2 = Integer.valueOf(u2.number.substring(1));
return n1.compareTo(n2);

  • 1

Reply