Java 通过查找索引快速添加整数(需要100万个添加调用),使ArrayList在每次添加调用后保持排序

Java 通过查找索引快速添加整数(需要100万个添加调用),使ArrayList在每次添加调用后保持排序,java,Java,我的老师想让我在MySortedArray类中的泛型arraylist中一次添加一个整数项。我必须加上1000个项目。他希望我在MySortedArray中实现的自定义add方法,需要能够在每次添加之后对arraylist进行排序。但是,在每次add()调用之后对其进行一百万次排序太慢了。我该怎么办?我需要能够在ArrayList中找到索引,在那里我应该非常快速地添加整数项。二进制搜索有效吗 @Test void testRandomInts() { MySort

我的老师想让我在MySortedArray类中的泛型arraylist中一次添加一个整数项。我必须加上1000个项目。他希望我在MySortedArray中实现的自定义add方法,需要能够在每次添加之后对arraylist进行排序。但是,在每次add()调用之后对其进行一百万次排序太慢了。我该怎么办?我需要能够在ArrayList中找到索引,在那里我应该非常快速地添加整数项。二进制搜索有效吗

    @Test
    void testRandomInts() {
        MySortedArray<Integer> ints = new MySortedArray<>(10);
        
        for (int i = 0; i < 200; i++) {
            int num = (int)(Math.random() * 10 + 1);
            ints.add(num);
        }
        System.out.println("array is: " + ints.contents.toString());
        assertTrue(isSorted(ints));
    }
@测试
void testRandomInts(){
MySortedArray ints=新的MySortedArray(10);
对于(int i=0;i<200;i++){
int num=(int)(Math.random()*10+1);
整数相加(num);
}
System.out.println(“数组为:+ints.contents.toString());
资产真实(isSorted(ints));
}
int index=Collections.binarySearch(内容、项目);
如果(索引<0)索引=~index;
目录。添加(索引、项目);

改用LinkedList?我的老师强迫我们使用ArrayList:(MySortedArray类确实实现了Comparable,因此我不确定是否应该使用compareTo方法来查找要添加项的索引。但是,我需要快速查找索引。您的老师可能打算让您使用二进制搜索来确定插入下一个元素的索引。您能给我一个测试吗关于如何进行二进制搜索的示例?这是否回答了您的问题?您可以使用一个简单的示例来简化您的代码。仅代码的答案被标记为低质量。您能否添加一个简短的说明,说明这是如何工作的,以及为什么这是一个很好的问题解决方案?谢谢!
  int index = Collections.binarySearch(contents, item);
  if (index < 0) index = ~index;
  contents.add(index, item);