Java I';我在将项目添加到已按字母顺序排列的数组时遇到问题

Java I';我在将项目添加到已按字母顺序排列的数组时遇到问题,java,arrays,Java,Arrays,到目前为止,我有下面写的东西,但我如何确保项目添加返回到它的字母顺序的地点? 我是初学者,所以我不能使用ArrayList或与之相关的方法 任何形式的帮助或推动在正确的方向将不胜感激。谢谢 方法应遵循以下说明: - Adds an item to the list. This method assumes that the list is already sorted in alphabetical order based on the names of the item

到目前为止,我有下面写的东西,但我如何确保项目添加返回到它的字母顺序的地点? 我是初学者,所以我不能使用ArrayList或与之相关的方法

任何形式的帮助或推动在正确的方向将不胜感激。谢谢

方法应遵循以下说明:

     - Adds an item to the list.  This method assumes that the list is already
      sorted in alphabetical order based on the names of the items in the list.

     - The new item will be inserted into the list in the appropriate place so
      that the list will remain alphabetized by names.

      In order to accommodate the new item, the internal array must be re-sized 
      so that it is one unit larger than it was before the call to this method.


public void add(Listable itemToAdd) {
         Listable[] items1;
         int newlength = items.length+1;
         items1 = new Listable [newlength];
         for(int i = 0;i<items.length;i++){
             items1[i] = items[i];
             items1[newlength-1] = itemToAdd;
         }
    }   
-将项目添加到列表中。此方法假定该列表已经存在
根据列表中项目的名称按字母顺序排序。
-新项目将插入列表中的适当位置,以便
名单将按姓名字母顺序排列。
为了容纳新项目,必须重新调整内部阵列的大小
因此,它比调用此方法之前大一个单位。
公共作废添加(列表项添加){
可列出的[]项1;
int newlength=项目。长度+1;
items1=新的可列表[新长度];

对于(inti=0;i这对一个开始来说还不错!我们需要做很多事情。这一行

items1[newlength-1] = itemToAdd;
需要从循环中出来,然后再放置--您只需将某个数组元素设置为该值一次,是的,并且不会多次

复制部分是一个好的开始。你需要做的是

  • 找到新元素应该去的位置(在数组中搜索,并找到新元素应该去的元素)
  • 复制新元素之前的元素
  • 复制新元素
  • 复制新元素后面的元素(调整它们的索引,因为它们都比以前晚了一个!)

  • 有意义吗?

    如果你是初学者,你可能已经了解了。插入排序的一个有趣特性是,尽管在一般情况下(O(n2))它的运行时间很差,但在最佳情况下(排序列表)它的性能相当好-O(n),事实上。几乎排序的列表将在同一个效率类中运行。这可能是完成您尝试执行的操作的一种方法。(这也可能是为数不多的使用插入排序的地方之一,所以请充分利用它。)

    这可能是一种懒惰的方法,但为什么不将其添加到末尾并重新排序呢?听起来像是一个家庭作业问题:)当然还有AVL树方法。也不确定它是否是最佳解决方案。每次循环时,您都会将
    itemToAdd
    分配给数组的最后一个元素。由于数组已经排序,您能想出一种方法来找到该项应添加到数组中的位置吗?这就是问题所在,没有指定的ite列表ms在数组中,所以我不知道它到底去了哪里。除非我误解了你,否则有更好(更简单)的方法方法。@Sathish:您需要进行比较以找出元素应该放在哪里。例如,使用
    compareTo
    方法比较两个项目的名称。那么我如何实现compareTo方法以确定参数在数组中的位置呢?
    String
    已经有了一个合适的
    compareTo()
    它自己的方法。