将元素添加到ArrayList中

时间:2014-11-04 06:20:33

标签: java arraylist

I done this code for Add and Remove the elements from the arraylist. But I can't complete the remove method of this code. 

Can anyone help me for implement the remove method which is created in this code?


    package Comp10152_linkedlist;

    /**
     *
     * @author Bhumi-Kishan
     */
    public class SimpleArrayList {
      // Constants for the default capacity and
       // the resizing factor.
       private final int DEFAULT_CAPACITY = 10;
       private final int RESIZE_FACTOR = 2;

       // Private Fields
       private String[] list;  // The list
       private int elements;   // Number of elements stored

       /** This constructor creates an empty list of the
           default capacity.
       */
       public SimpleArrayList()
       {
          list = new String[DEFAULT_CAPACITY];
          elements = 0;
       }

       /** Add a string to the end of the list.
           @param str The string to add. 
       */

       public void add(String str)
       {
           // To be completedint
           // Hint - once you know the correct spot to place the elemnt use the 
           // private add method to place the item in the correct place
           //
       }

       /** Add a string at a specific index.
           @param index The added string's position.
           @param str The string to add.
           @exception IndexOutOtBoundsException When index
                      is out of bounds.
       */   
       public void add(int index, String str)
       {
          // First make sure the index is valid.
          if (index > elements || index < 0)
             throw new IndexOutOfBoundsException();

          // If the list is full, resize it.
          if (elements == list.length)
             resize();

          // Shift the elements starting at index
          // to the right one position.
          for (int index2 = elements; index2 > index; index2--)
             list[index2] = list[index2 - 1];

          // Add the new element at index.
          list[index] = str;

          // Adjust the number of elements.
          elements++;
       }

       /** Search the list for a specified string.
           @param str The string to search for.
           @return true if the list contains the string;
                   false otherwise.
       */
       public boolean contains(String str)
       {
          int index = 0;          // Index counter
          boolean found = false;  // Search flag

          // Step through the list. When the string
          // is found, set found to true and stop.
          while (!found && index < elements)
          {
             if (list[index].equals(str))
                found = true;
             index++;
          }

          // Return the status of the search.
          return found;
       }

       /** Get an element at a specific position.
           @param index The specified index.
           @return The element at index.
           @exception IndexOutOtBoundsException When index
                      is out of bounds.
       */
       public String get(int index)
       {
          if (index >= elements || index < 0)
             throw new IndexOutOfBoundsException();
          return list[index];
       }

       /** Determines whether the list is empty.
           @return true if the list is empty; false otherwise.
       */
       public boolean isEmpty()
       {
          return (elements == 0);
       }

       /** Remove a specific string from the list.
           @param str The string to remove.
           @return true if the string was found; false otherwise.
       */
       public boolean remove(String str)
       {
          // Hint : use text examples to assist or refer to the private add method above
          return false;


       }

       /** Get the number of elements in the list.
           @return The number of elements in the list.
       */
       public int size()
       {
          return elements;
       }

       /** Resizes the list to twice its current length. */
       private void resize()
       {
          // Calculate the new length, which is the current
          // length multiplied by the resizing factor.
          int newLength = list.length * RESIZE_FACTOR;

          // Create a new list.
          String[] tempList = new String[newLength];

          // Copy the existing elements to the new list.
          for (int index = 0; index < elements; index++)
             tempList[index] = list[index];

          // Replace the existing list with the new one.
          list = tempList;
       }

       /** Convert the list to a String
           @return A String with the same elements as the list.
       */
       public String toString()
       {
        StringBuilder strBuilder = new StringBuilder();

        // Use p to walk down the linked list
          // Store the elements in the array.
          for (int index = 0; index < elements; index++)
            strBuilder.append("[" + list[index] + "]");

          // Return the String.
          return strBuilder.toString();
       }  
    }

我在下面的主类中调用这个上层Simplearraylist类方法。我不知道SimpleArrayList类中remove方法的实现。任何人都可以给我一个解决方案吗?主要的是我不希望在主类中有任何改变。我只想根据它在main类中的调用实现remove方法的删除方法。  / *      *要更改此许可证标题,请在“项目属性”中选择“许可证标题”。      *要更改此模板文件,请选择“工具”|模板      *并在编辑器中打开模板。      * /

package Comp10152_linkedlist;

/**
 *
 * @author Bhumi-Kishan
 */

import java.util.Random;

public class Comp10152_Lab4 
{
   public static void main(String[] args)
  {
    final int NUMBER_OF_ITERATIONS = 10;
    String names[] = {"Amy", "Bob", "Al", "Beth", "Carol", "Zed", "Aaron"};
    SimpleLinkedList ll = new SimpleLinkedList();
    final int TOTALOPERATIONS = names.length * NUMBER_OF_ITERATIONS;

    Random random = new Random();

    for (int i=0; i<NUMBER_OF_ITERATIONS;i++)
    {
      for (int j=0; j<names.length; j++)
        ll.add(names[j]);
    }
     System.out.println("The members of list are:");
      System.out.println(ll);
    // remove half of the items in the list by selecting randomly from names
    for (int i=0; i<TOTALOPERATIONS/2;i++)
    {
      ll.remove(names[random.nextInt(names.length)]);
    }
    System.out.println("The members of list are:");
      System.out.println(ll);
    SimpleArrayList al = new SimpleArrayList();
    for (int i=0; i<NUMBER_OF_ITERATIONS;i++)
    {
      for (int j=0;j<names.length;j++)
         al.add(i,names[j]);
    }
      System.out.println("The members of array are:");
      System.out.println(al);

    // remove half of the items in the list by selecting randomly from names
    for (int i=0; i<TOTALOPERATIONS/2;i++)
    {
      al.remove(names[random.nextInt(names.length)]);
    }   
     System.out.println("The members of array are:");
      System.out.println(al);
  }     
}

3 个答案:

答案 0 :(得分:1)

假设您只需删除第一次出现,IAW使用ArrayList #remove(Object)方法:

public boolean remove(String str)  {

    for (int i=0;i<list.length;i++) {
        final String s = list[i];
        if (str == s || s.contentEquals(str)) {
            String[] newList = new String[list.length];
            System.arraycopy(list, 0, newList ,0, i);
            if (list.length > i+1) {
                System.arraycopy(list, i+1, newList, i, list.length - 1 - i);
            }
            list = newList;
            elements--;
            return true;
         }
     }
     return false;
}

编辑:为删除方法添加了单元测试

public class SimpleArrayListTest {

    @Test
    public void testRemove() {
        final String ONE = "one";
        final String TWO = "two";
        final String THREE = "three";

        SimpleArrayList l = new SimpleArrayList();
        l.add(0,ONE);
        l.add(1,TWO);
        l.add(2,THREE);
        l.remove(TWO);
        assertEquals(2, l.size());
        assertTrue(l.contains(ONE));
        assertTrue(l.contains(THREE));
        l.remove(ONE);
        assertEquals(1, l.size());
        assertTrue(l.contains(THREE));
        l.remove(THREE);
        assertEquals(0, l.size());
    }

}

答案 1 :(得分:0)

遍历列表,检查字符串是否匹配删除并返回true

public boolean remove(String str)
   {
      // Hint : use text examples to assist or refer to the private add method above

            for ( int i = 0;  i < list.size(); i++){
            String tempName = list.get(i);
            if(tempName.equals(str){
                name.remove(i);
               return true;
            }
          return false;
        }    
   }
  

从此列表中删除第一次出现的指定元素,   如果它存在。如果列表不包含该元素,则为   不变。

答案 2 :(得分:0)

如何使用java泛型集合,请参考以下解决方案:

多次删除:多次出现给定字符串值

public boolean remove(String str)  {
    int previousLength =list.length;
    List<string> newList = new ArrayList<string>();
    for (int i=0;i<previousLength;i++) {
        final String s = list[i];
        if (str == s || s.contentEquals(str)) {
            continue;
         }
         list.add(s);
     }
     list = newList.toArray(new String[newList.size()]);
     //if same size then no element found and no delete operation => 5!=5 returns "false"
     //if different size then element is deleted => 4!=5 returns "true"
     return list.length!=previousLength;
}

对于单次删除:多次/单次出现

public boolean remove(String str)  {
    int previousLength =list.length;
    List<string> newList = new ArrayList<string>();
    for (int i=0;i<previousLength;i++) {
        final String s = list[i];
        if (str == s || s.contentEquals(str)) {
            for (int j=i+1;j<previousLength;j++) {
                s = list[j];
                list.add(s);
            }
            break; //https://stackoverflow.com/questions/462373/difference-between-break-and-continue-statement
         }
         list.add(s);
     }
     list = newList.toArray(new String[newList.size()]);
     //if same size then no element found and no delete operation => 5!=5 returns "false"
     //if different size then element is deleted => 4!=5 returns "true"
     return list.length!=previousLength;
}

希望这会有所帮助......

<强>参考

https://thenewcircle.com/static/bookshelf/java_fundamentals_tutorial/generics_collections.html http://www.tutorialspoint.com/java/java_generics.htm Difference between break and continue statement