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

标签 java

我设计了使用 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/

相关文章:

java - 用于 FTP 操作的标准 Java 类

java - 社交身份验证 - 链接在 OAuth 2 中不起作用

java - App Engine Java Servlet 中收到 OAuthRequestException

java - 为什么我的 MDC SLF4J 中的两个请求会出现重复的 ID?

java - 自动滚动 JavaFX TextFlow

条件空检查时的 Java NullPointerException

java - 为什么Tomcat不保留最小堆空间

java - jnativehook 构建失败 jni.h 未找到

java - Java Streams 可以将点列表转换为其坐标列表吗?

java - 单击按钮时旋转图像而不是单击按钮时停止图像