【问题标题】:Simplified verison of storing specific values inside an hashmap<String, Comparator>在 hashmap<String, Comparator> 中存储特定值的简化版本
【发布时间】:2015-12-20 20:45:54
【问题描述】:

所以我制作了一个hashmap来存储玩家数据,当有人第一次加入时它会执行一个查询,查询结果中的数据会存储在hashmap中。

我想知道是否有一种简化我所做工作的好方法?我正在尝试做的事情是否有更好的选择。我这样做的原因是我不想不断地从 MySQL 数据库中提取数据,因为这样做效率极低且速度很慢。

那么,对于我正在尝试做的事情,有哪些更好、更有效的替代方案。

我的比较器

public class Auth {

core plugin;

private String uuid;
private String name;
private int bits;
private String cult;
private String rank;
private String kit;

private int kills;
private int deaths;
private int blockstraveled;
private int blockbroken;

public Auth(String uuid, String name, int bits, String cult, String rank, String kit, int kills, int deaths, int blockstraveled, int blockbroken) {
    super();
    this.uuid = uuid;
    this.name = name;
    this.bits = bits;
    this.cult = cult;
    this.rank = rank;
    this.kit = kit;
    this.kills = kills;
    this.deaths = deaths;
    this.blockstraveled = blockstraveled;
    this.blockbroken = blockbroken;
}

public String getPlayerUUID() { return uuid; }
public String getPlayerName() {return name;}
public int getPlayerBits()
{
    return bits;
}
public String getPlayerCult() { return cult; }
public String getPlayerRank() { return rank; }
public String getPlayerKit() { return kit; }

//Stats
public int getPlayerKills() { return kills; }
public int getPlayerDeaths() { return deaths; }
public int getPlayerBlocksTraveled() { return blockstraveled; }

public int getPlayerBlocksBroken() { return blockbroken; }










@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (!(o instanceof Auth)) {
        return false;
    }
    Auth auth = (Auth) o;
    return Objects.equals(uuid, auth.uuid);

}

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

@Override
public String toString() {
    return "Auth{" +
            "uuid='" + uuid + '\'' +
            ", name='" + name + '\'' +
            ", bits=" + bits +
            ", gang='" + cult + '\'' +
            ", rank='" + rank + '\'' +
            '}';
}

我的身份验证管理器类

公共类 authmanager {

core plugin;
//public List<Auth> Auth = new ArrayList<Auth>();
public HashMap<String, Auth> auth = new HashMap<>();



public void saveUser(String uuid, String name, int bits, String cult, String rank, String kit, int kills, int deaths, int blockstraveled, int blocksbroken)
{

    this.auth.put(uuid, new Auth(uuid, name, bits, cult, rank, kit, kills, deaths, blockstraveled, blocksbroken));

}



public void saveCult(UUID u, String cult )
{
    this.auth.put(u.toString(), new Auth(
            auth.get(u.toString()).getPlayerUUID(),
            auth.get(u.toString()).getPlayerName(),
            auth.get(u.toString()).getPlayerBits(),
            cult,
            auth.get(u.toString()).getPlayerRank(),
            auth.get(u.toString()).getPlayerKit(),
            auth.get(u.toString()).getPlayerKills(),
            auth.get(u.toString()).getPlayerDeaths(),
            auth.get(u.toString()).getPlayerBlocksTraveled(),
            auth.get(u.toString()).getPlayerBlocksBroken()));
}

public void saveRank(UUID u, String rank )
{
    this.auth.put(u.toString(), new Auth(
            auth.get(u.toString()).getPlayerUUID(),
            auth.get(u.toString()).getPlayerName(),
            auth.get(u.toString()).getPlayerBits(),
            auth.get(u.toString()).getPlayerCult(),
            rank,
            auth.get(u.toString()).getPlayerKit(),
            auth.get(u.toString()).getPlayerKills(),
            auth.get(u.toString()).getPlayerDeaths(),
            auth.get(u.toString()).getPlayerBlocksTraveled(),
            auth.get(u.toString()).getPlayerBlocksBroken()));

}

public void saveBits(UUID u, int bits )
{
    this.auth.put(u.toString(), new Auth(
            auth.get(u.toString()).getPlayerUUID(),
            auth.get(u.toString()).getPlayerName(),
            auth.get(u.toString()).getPlayerBits() + bits,
            auth.get(u.toString()).getPlayerCult(),
            auth.get(u.toString()).getPlayerRank(),
            auth.get(u.toString()).getPlayerKit(),
            auth.get(u.toString()).getPlayerKills(),
            auth.get(u.toString()).getPlayerDeaths(),
            auth.get(u.toString()).getPlayerBlocksTraveled(),
            auth.get(u.toString()).getPlayerBlocksBroken()));

}

public void saveKit(UUID u, String kit )
{
    this.auth.put(u.toString(), new Auth(
            auth.get(u.toString()).getPlayerUUID(),
            auth.get(u.toString()).getPlayerName(),
            auth.get(u.toString()).getPlayerBits(),
            auth.get(u.toString()).getPlayerCult(),
            auth.get(u.toString()).getPlayerRank(),
            kit,
            auth.get(u.toString()).getPlayerKills(),
            auth.get(u.toString()).getPlayerDeaths(),
            auth.get(u.toString()).getPlayerBlocksTraveled(),
            auth.get(u.toString()).getPlayerBlocksBroken()));

}

public void saveKills(UUID u, int kills )
{
    this.auth.put(u.toString(), new Auth(
            auth.get(u.toString()).getPlayerUUID(),
            auth.get(u.toString()).getPlayerName(),
            auth.get(u.toString()).getPlayerBits(),
            auth.get(u.toString()).getPlayerCult(),
            auth.get(u.toString()).getPlayerRank(),
            auth.get(u.toString()).getPlayerKit(),
            auth.get(u.toString()).getPlayerKills() + kills,
            auth.get(u.toString()).getPlayerDeaths(),
            auth.get(u.toString()).getPlayerBlocksTraveled(),
            auth.get(u.toString()).getPlayerBlocksBroken()));

}


public void saveDeaths(UUID u, int deaths )
{
    this.auth.put(u.toString(), new Auth(
            auth.get(u.toString()).getPlayerUUID(),
            auth.get(u.toString()).getPlayerName(),
            auth.get(u.toString()).getPlayerBits(),
            auth.get(u.toString()).getPlayerCult(),
            auth.get(u.toString()).getPlayerRank(),
            auth.get(u.toString()).getPlayerKit(),
            auth.get(u.toString()).getPlayerKills(),
            auth.get(u.toString()).getPlayerDeaths() + deaths,
            auth.get(u.toString()).getPlayerBlocksTraveled(),
            auth.get(u.toString()).getPlayerBlocksBroken()));

}


public void saveBlocksTraveled(UUID u, int blockstraveled )
{
    this.auth.put(u.toString(), new Auth(
            auth.get(u.toString()).getPlayerUUID(),
            auth.get(u.toString()).getPlayerName(),
            auth.get(u.toString()).getPlayerBits(),
            auth.get(u.toString()).getPlayerCult(),
            auth.get(u.toString()).getPlayerRank(),
            auth.get(u.toString()).getPlayerKit(),
            auth.get(u.toString()).getPlayerKills(),
            auth.get(u.toString()).getPlayerDeaths(),
            auth.get(u.toString()).getPlayerBlocksTraveled() + blockstraveled,
            auth.get(u.toString()).getPlayerBlocksBroken()));

}

public void saveBlocksBroken(UUID u, int blocksbroken )
{
    this.auth.put(u.toString(), new Auth(
            auth.get(u.toString()).getPlayerUUID(),
            auth.get(u.toString()).getPlayerName(),
            auth.get(u.toString()).getPlayerBits(),
            auth.get(u.toString()).getPlayerCult(),
            auth.get(u.toString()).getPlayerRank(),
            auth.get(u.toString()).getPlayerKit(),
            auth.get(u.toString()).getPlayerKills(),
            auth.get(u.toString()).getPlayerDeaths(),
            auth.get(u.toString()).getPlayerBlocksTraveled(),
            auth.get(u.toString()).getPlayerBlocksBroken() + blocksbroken));

}

}

【问题讨论】:

  • 堆栈溢出不是代码审查网站

标签: java mysql


【解决方案1】:

考虑到您的个人方法(如 saveCult())只会在现有 UUID 上调用,您可以通过以下方式简化:

public void saveCult(UUID u, String cult ) {
   Auth a= this.auth.get(u.toString());
   if(a != null) { //SHOULD always be true, but who knows?
     a.setCult(cult);
     this.auth.put(u.toString(), a);
   }
}

当然,您需要在 Auth 类中添加一个 setters 才能使其正常工作。

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 2019-05-20
    • 2012-06-18
    • 2016-04-21
    • 1970-01-01
    • 2013-10-04
    • 2016-05-07
    相关资源
    最近更新 更多