2011-07-24 82 views
1

我正在建立一个数组,基于比较两个其他数组。但是当我初始化我的第三个阵列时,我必须设置长度。但是这使得我的数组在某些情况下有空对象。在那里,我可以删除数组中的空/空位置。见我的代码如下远:删除空数组值

private String[] tags  = new String[] { "Mike", "Bob", "Tom", "Greg" }; 
    private boolean[] selected = new boolean[tags.length]; 
    public String[] selected_tags = new String[tags.length]; 

     for (int i = 0; i < tags.length; i++) { 
      if (selected[i] == true){ 
       selected_tags[i] = tags[i]; 
      } 
     } 

我离开了代码为构建Boolen selected []的复选框。

无论哪种方式,如果我只选择2个标签,然后我selected_tags []数组将Mike, Bob, Null, Null

我需要得到空空出来。提前致谢!

+0

我建议你使用ArrayList来代替。 –

回答

9

您可以使用ArrayList而不是数组。

private String[] tags  = new String[] { "Mike", "Bob", "Tom", "Greg" }; 
private boolean[] selected = new boolean[tags.length]; 
public List<String> selected_tags = new ArrayList<String>(); 

for (int i = 0; i < tags.length; i++) { 
    if (selected[i] == true){ 
     selected_tags.add(tags[i]); 
    } 
} 
+0

可以相信我只是浪费了一个小时,试图在一起轻松地将它们拼凑在一起。谢谢! – Denoteone

+3

@Denoteone请点击您的问题答案旁边的复选标记。这样其他人会立即知道问题得到了解答。 (对所有有用的答案进行投票也很好。) –

+0

@Ted Hop我必须根据有用的反馈来测试我的代码。我总是投票并接受答案。我道歉,但早上3点,我只是觉得睡着了。 – Denoteone

2

而不是使用一个标准的Java数组,你应该使用一个ArrayList:它会允许你将元素添加到它,根据需要自动增长的列表。


基本上,你首先声明/实例化的ArrayList,不指定任何大小:

public ArrayList<String> selected_tags = new ArrayList<String>(); 

,然后,在你的循环,你应该使用add()方法添加项目到ArrayList的:

selected_tags.add(tags[i]); 
4

不,你不能删除空值(和改变数组的长度)你已经创建之后。你必须创建一个新的(或例如使用ArrayList如下图所示):

List<String> list = new ArrayList<String>(); 

for (int i = 0; i < tags.length; i++) 
    if (selected[i] == true) 
     list.add(tags[i]); 

// Convert it to an array if needed: 
selected_tags = list.toArray(new String[list.size()]); 
2

正如其他人所说,这是与ArrayList容易得多。你甚至可以用toArray函数从它得到一个常规数组。

如果不使用ArrayList,则必须首先计算长度,而不包含null值。正如你所看到的,这有点凌乱:

int length = 0; 
for(boolean b : selected) if(b) ++length; // Count the "true"s 

String[] selected_tags = new String[length]; 
for(int i = 0, j = 0; i < tags.length; i++) 
    if(selected[i]) 
     selected_tags[j++] = tags[i];