当前位置: 首页 > 面试题库 >

以升序将元素插入ArrayList且没有重复的元素

白子默
2023-03-14
问题内容

我有一个家庭作业,需要在ArrayList<Interger>以下条件下插入或添加新元素:

  1. 元素必须 升序

  2. 中没有重复的 元素ArrayList<Integer>

  3. insert方法运行 O(n) 次。

这是我在添加新元素之前检查重复元素的插入方法。

    public void insert(int x){
            //effect: Check duplicate elements if not x to the elements;
                boolean found = false;
                if(super.size()!=0){
                    for(int i=0; i<super.size(); i++){
                        if(super.get(i)==x){
                            found = true;
                        }
                    }
                }
                if(found){ return; }
                else{ super.add(x);  }
        }

我该怎么做?谢谢。

加成

这是我的班级名称InSetExtra

public class IntSetExtra extends ArrayList<Integer> {


    private static final long serialVersionUID = 1L;

    public IntSetExtra(){
        super();
    }

    public void insert(int x){
        //effect: Check duplicate elements if not x to the elements;
            boolean found = false;
            if(super.size()!=0){
                for(int i=0; i<super.size(); i++){
                    if(super.get(i)==x){
                        found = true;
                    }
                }
            }
            if(found){ return; }
            else{ super.add(x);  }
    }

    public String toString(){
        //effect: return string of this.
        if(super.size()==0) return "[]";
        String s = "[" + super.get(0).toString();
        for(int i=1; i<super.size(); i++){
            s += ", " + super.get(i).toString();
        }
        return s += "]";
    }

}

我需要插入大尺寸的元素,例如:

IntSetExtra a, b;

    a = new IntSetExtra();
    b = new IntSetExtra();

    for(int i=0; i<30000; i++){ a.insert(2*i); }
    for(int i=0; i<30000; i++){ a.insert(i); }

    System.out.println("a sub = "+a.toString().substring(0, 37));

我该怎么办?

ps。我的教练只需要使用ArrayList


问题答案:

这是我的处理方式:(注释中的解释)

public void insert(int x){
    // loop through all elements
    for (int i = 0; i < size(); i++) {
        // if the element you are looking at is smaller than x, 
        // go to the next element
        if (get(i) < x) continue;
        // if the element equals x, return, because we don't add duplicates
        if (get(i) == x) return;
        // otherwise, we have found the location to add x
        add(i, x);
        return;
    }
    // we looked through all of the elements, and they were all
    // smaller than x, so we add ax to the end of the list
    add(x);
}

您发布的当前解决方案看起来大部分都是正确的,除了它不会按升序保存元素的事实。



 类似资料:
  • 我是Vaadin和Java的新手,我正在处理以下问题: 在下面的代码中,我想在ArrayList“newList”中添加多个元素。如你所见,名为“ps”的元素有5个子元素。 问题是,在ArrayList中添加的当前(循环中的)元素替换了每个索引中所有先前的元素,结果它最终只返回最后一个“ps”元素,循环发生的次数是多少。 和代码:

  • 在Java集合中,哪个集合不允许重复,哪个集合还保留数据的插入顺序?

  • 实际上,我已经实现了listview,在这里我们可以通过点击与之相关的togglebutton来选择合适的行。我正在将该行中的数据添加到arraylist。但是,我面临的问题是,当我选择行1,然后选择行2时,arraylist中的数据如下:(行1数据,行1数据,行2数据),这里行1数据是重复的。。但是,我需要这个:(第1行数据,第2行数据)。甚至我也尝试使用clear()方法。但是,当我使用它时,

  • 我想从数组列表打印元素,但我得到错误的输出(.A@15db9742)

  • 当我使用System.out.println静态方法时,下面的Java程序显示ArrayList中的所有元素。但是,当我在方法中返回列表时,它只显示ArrayList中的一个元素。我希望你能给我一些指点,让我知道你做错了什么:

  • 这几天我一直有麻烦,无法克服。我有一个arrayList存储。 我想根据我的endTime对我的事件进行排序,我得到的问题是endTime基于startTime,它使用我的课程中的小时和分钟。当我试着使用时,我感到困惑。我把它放在我的类中,但后来意识到它必须放在我的类中才能比较实例。如何使用compareTo来比较结束时间,以及如何输出排序。当我在我的事件中进行比较时,我得到了 我也可以一个类,或