gpt4 book ai didi

java - 我的 Intset 类有什么问题吗?

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:07 24 4
gpt4 key购买 nike

我设计了使用 ArrayList 的新 IntSet 类。首先,我通过 ArrayList 扩展 Intset 并开始实现方法。我在 union() 方法中遇到了一些问题。这是我的代码...

public class IntSet extends ArrayList<Integer>{

private static final long serialVersionUID = 1L;
private ArrayList<Integer> intset;

public IntSet(){
this.intset = new ArrayList<Integer>();
}
public IntSet(ArrayList<Integer> intset){
this.intset = intset;
}

public void insert(int x){
this.intset.add(x);
}

@Override
public Integer remove(int x){
int index = intset.indexOf(x);
this.intset.remove(index);
return 1;
}

@Override
public int size(){
return this.intset.size();
}

@Override
public Integer get(int index){
return this.intset.get(index);
}

public boolean member(int x){
if(intset.indexOf(x)==-1) return false;
else return true;
}

public IntSet union(IntSet a){
IntSet intersectSet = new IntSet();
intersectSet.insert(0);
intersectSet.insert(1);
System.out.println(intersectSet.size());
System.out.println(intersectSet.contains(1));
for(int i=0; i<a.size(); i++){
}
return intersectSet;
}

public String toString(){
if(intset.size()==0) return "[]";
String s = "[" + intset.get(0).toString();
for(int i=1; i<intset.size(); i++){
s += "," + intset.get(i).toString();
}
return s += "]";
}

}

在方法中

union(IntSet a);

我构建了新的 Intset 对象,然后将 2 个值 (0, 1) 添加到 intersectSet 变量中。

intersectSet.insert(0);
intersectSet.insert(1);

然后我打印 intersectSet 的大小,它告诉我 2 是正确的!

但是当我需要检查 intersectSet 中是否有 1 时?它显示我是错误的。

System.out.println(intersectSet.contains(1));

事实上,它应该告诉我是真的,因为在 intersectSet 中有整数 1。

我的代码有什么问题吗?我应该为 IntSet 类扩展 ArrayList 吗?

最佳答案

关于类设计的一些建议:

  • 不要让你的类扩展 ArrayList。 “集合”真的不应该扩展列表。但是,您可能应该实现 Set。这将有额外的好处,编译器会告诉您需要为集合实现哪些方法......
  • 为了获得最快的性能(但工作更多!),您可能希望使用内部数组而不是 ArrayList。
  • 考虑使结构不可变,使用返回新副本而不是就地改变集合的函数。根据您的使用情况,这可能是更好的解决方案,尤其是当您主要处理小型、不变的集合时。
  • 同样,根据您的使用情况,您可能希望覆盖 hashCode 和 equals 以实现基于值的相等性
  • 当您使用 ArrayList 构造 Intset 时,理想情况下您应该防御性地复制(克隆)ArrayList。如果有人改变原始 ArrayList,您不希望您设置更改。

关于java - 我的 Intset 类有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3594294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com