删除值后排序数组

时间:2017-12-19 20:38:56

标签: java arrays sorting

如何在删除一个值后对数组进行排序?

e.g。 {1,2,3,4,5} - > {1,2,null,4,5} - > {1,2,4,5,null}

public boolean removeNumber(int accountNumber) {
    for(int i = 0; i < Account.length; i++) {
        if(Account[i].getAccountNumber() == (accountNumber)) {
            Account[i] = null;
        }

2 个答案:

答案 0 :(得分:1)

由于您的原始数组已经排序,并且假设只有一个Account可以具有该特定accountNumber,因此无需再次对数组进行排序。只需找到要删除的元素,然后将该元素后面的所有内容移动到一个位置,并将新释放的元素置空。

我已将Account字段重命名为accounts以遵循Java命名约定,以便更清楚地区分数组(accounts)和类({{1}对于未来的开发人员来说,以及Java编译器都是如此。

Account

现在,如果你坚持对数组进行排序,你可以在Java 8 +中这样做:

public boolean removeNumber(int accountNumber) {
    for (int i = 0; i < accounts.length; i++) {
        if (accounts[i].getAccountNumber() == accountNumber) {
            System.arraycopy(accounts, i + 1, accounts, i, accounts.length - i - 1);
            accounts[accounts.length - 1] = null;
            return true; // Found and removed
        }
    }
    return false; // Not found, so nothing removed
}

答案 1 :(得分:0)

您可以按照这种方式实现这一目标:

  1. 您需要找到accounts您正在寻找的accountNumber
  2. 您在null
  3. 上将其设为array
  4. 您使用arraycustom Comparator进行排序:
    • 如果元素是null,则必须在最后
    • 如果两者都是not-null,则比较他们的accountNumber
  5. public boolean removeNumber(int accountNumber) {
        for (int i = 0; i < Account.length; i++) {
            if (Account[i].getAccountNumber() == accountNumber) {
                Account[i] = null;
            }
        }
        Arrays.sort(Account, (o, p) -> {
            if (o == null)
                return 1;
            if (p == null)
                return -1;
            return Integer.compare(o.getAccountNumber(), p.getAccountNumber());
    
        });
        return true;
    }
    

    提示:

    • 遵循命名惯例:camelCase代表attriutes ==&gt; Account[]变为account[]
    • 在比较对象时使用.equals()int ==是对的