Java 如何覆盖集合的移除方法?
我正在尝试为Set编写remove方法,但在测试它时它不起作用。我做错了吗?移除元素后,大小不会减小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) {
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
,那会怎么样?谢谢,这很有帮助。