Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何覆盖集合的移除方法?_Java - Fatal编程技术网

Java 如何覆盖集合的移除方法?

Java 如何覆盖集合的移除方法?,java,Java,我正在尝试为Set编写remove方法,但在测试它时它不起作用。我做错了吗?移除元素后,大小不会减小 public class MySet<T> implements Set<T> { private T[] arrayB; private int elements; @Override public boolean remove(Object f) { T h = (T) f; for (T z : arrayB) {

我正在尝试为Set编写remove方法,但在测试它时它不起作用。我做错了吗?移除元素后,大小不会减小

public class MySet<T> implements Set<T> {

  private T[] arrayB;
  private int elements;

  @Override
  public boolean remove(Object f) {
      T h = (T) f;
      for (T z : arrayB) {
          if(z == h) {
              z = null;
          }
      }
      return true;
  }

  @Override
  public int size() {
      int count = 0;
      for(int arr = 0; arr < arrayB.length; arr++){
          if(arrayB[arr] != null) {
              count++;
          }
      }
      return count;
  }  
for (int i = 0; i < array.length; i++)
{
    if (array[i] != null && array[i].equals(h))
    {
        array[i] = null;
    }
}
公共类MySet实现Set{
私人T[]阵列b;
私有int元素;
@凌驾
公共布尔删除(对象f){
th=(T)f;
for(tz:arrayB){
如果(z==h){
z=零;
}
}
返回true;
}
@凌驾
公共整数大小(){
整数计数=0;
for(int-arr=0;arr
测试代码为:

MySet<Integer> ints = new MySet<Integer>();
    for (int i = 0; i < 100; i++) {
        ints.add(i);
    }
    for (int i = 0; i < 100; i += 2) {
        ints.remove(i);
    }   
}
MySet ints=new MySet();
对于(int i=0;i<100;i++){
内加(i);
}
对于(int i=0;i<100;i+=2){
删除(i)项;
}   
}

您的
size
方法依赖于元素是否为
null
来决定是否对其进行计数。假设您试图在数组中放置一个
null
,那么您就做错了。您所做的只是将
null
赋值给
z
,这只是一个局部变量。数组没有更改

必须使用传统的for循环并使用数组访问表达式将
null
赋值给数组元素。您还需要调用
equals
,而不是使用
=
来查找元素

public class MySet<T> implements Set<T> {

  private T[] arrayB;
  private int elements;

  @Override
  public boolean remove(Object f) {
      T h = (T) f;
      for (T z : arrayB) {
          if(z == h) {
              z = null;
          }
      }
      return true;
  }

  @Override
  public int size() {
      int count = 0;
      for(int arr = 0; arr < arrayB.length; arr++){
          if(arrayB[arr] != null) {
              count++;
          }
      }
      return count;
  }  
for (int i = 0; i < array.length; i++)
{
    if (array[i] != null && array[i].equals(h))
    {
        array[i] = null;
    }
}
for(int i=0;i

根据您是否想删除所有匹配的元素,或者仅仅是第一个元素,您可以考虑在<代码>中添加<代码>破解> />代码> >如果./P>在您的代码> Read()/代码>中,您需要使用<代码>均衡器()/<代码>而不是<代码>=。接下来,您需要将数组索引设置为

null
,而不仅仅是临时变量
z
。我试图覆盖它,但不起作用。建议:您可以跳过空检查并向后写入等号:
h.equals(array[I])
@NayukiMinase如果
h
null
,那会怎么样?谢谢,这很有帮助。