如何在java中检查数组是否填满?

时间:2015-12-15 23:23:03

标签: java arrays

我想检查数组中是否有75%的对象填充,如果是,我必须调整它的大小。在变量size中,我有我的对象(!= null),我有一个整数数组ints

public class PQ {

private int[] pq;
private int size;

public PQ(int capacity) {
    if (capacity < 1) {
        throw new IllegalArgumentException();
    }
    this.pq = new int[capacity + 1];
    this.size = 0;
}

public void insert(int number) {
           //Code
}


private int[] resize() {
    int[] newPQ = new int[this.pq.length * 2];
    for (int i = 0; i < this.pq.length; i++) {
        newPQ[i] = this.pq[i];
    }
    return newPQ;
}
}

4 个答案:

答案 0 :(得分:2)

试试这个:

无论何时添加元素,我们都会增加size(这将跟踪非空格的数量,这样您就不需要不断地重新计算数组)。然后我们将这个数字与数组的总长度进行比较。如果count至少是数组大小的75%,我们调用你的resize方法并将pq设置为它返回的新数组。我假设您希望添加到数组的末尾,并且您不希望数字之间有空索引。如果你想要间隙,你需要使用一个循环,我试图避免为了效率,如果没有必要。假设你没有,你可以在索引size添加到你的数组,因为这将是第一个非空元素。

//O(1) efficiency if you don't need to resize, O(n) if you do

public void insert(int number) {
       if(size / pq.length >= 75) {
           pq = resize();
       }
       pq[size] = number; //Since this will be the first non-empty index
       size++;
       return; //Doing it this way, if you can, is much more efficient than looping
}

如果你打电话删除并从最后取出,你将不得不将所有东西都移开,这样你就没有空的空间了。

如果你要使用空索引,请尝试这样的事情(在循环遇到的第一个空索引处插入)...让我们使用一个Integer [],这样你就可以检查null而不是不得不担心数组中的任何0被计为空(int []将所有内容都计为0)。 这样我们可以检查空白区域,如果您在int[]中使用任何空格,则0不会被计为空格。

    //O(n) efficiency if you don't need to resize, O(n^2) if you do

    public void insert(int number) {
           if(size / pq.length >= 75) {
               pq = resize(); 
               //You would have to make resize return an Integer[] and 
               //implement this throughout the code
           }
           for(int i = 0; i < pq.length; i++) {
                 if(pq[i] == null) {
                     pq[size] = number;
                     size++;
                     return;
                 }
           }
     }

<强>无论: 请记住,当您致电remove()以递减size时。

答案 1 :(得分:1)

你可以做的是有一个名为count的整数实例变量,它跟踪pq数组中元素的数量。每当通过insert方法将元素插入到数组中时,都可以增加count变量。每当通过remove方法从数组中删除元素时,都可以减少count变量。然后,您可以使用它来检查阵列是否至少填充75%,

from random import choice

from numpy import random
from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd

def my_kdeplot(dfx, dfy, *args, **kwargs):
    ax = sns.kdeplot(dfx, dfy, alpha=0.7,
                     cmap=sns.light_palette(kwargs['color'], as_cmap=True))

names = [choice('ABCDE') for _ in range(1000)]
df = pd.DataFrame(list(zip(names, *[random.random(1000) for _ in range(5)])),
                   columns=['names','A','B','C','D','E'])

g = sns.PairGrid(df, hue='names')

g.map_lower(my_kdeplot)
g.map_upper(plt.scatter, alpha=0.7)
g.map_diag(plt.hist)

g = g.add_legend(fontsize=14)
sns.plt.savefig('fig.png')

课程看起来像这样,

if(pq.length * .75 <= size){
     //do what you need to do here
}

答案 2 :(得分:0)

您明确将大小存储为变量。您还知道支持数组的大小。在需要检查大小时比较它们:if(this.size > 3*this.pq/4)

答案 3 :(得分:-1)

使用ArrayList以更有效的方式为您自动完成所有操作。

<强>编辑:

是初始化,全部放-1 -

this.pq = new int[capacity + 1];
Arrays.fill(pq, -1);

然后当你检查时你会这样:

if(pq[pq.length*.75] != -1) {
    // then is means that is has already filled up 75%
} else {
   // not filled 75% yet
}