2
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();
       }  
    }

I call this upper Simplearraylist class method in below main class. And i Don't know the implementation of remove method in SimpleArrayList class. Could anyone can give me a solution for this? And main thing is I dont want any change in main class. I just want Implemented code of remove method according to its call in main class. /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */

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);
  }     
}
2

3 Answers 3

1

Assuming you need to remove just the first occurance, IAW the ArrayList#remove(Object) method:

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;
}

Edit: added unit test for remove method

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());
    }

}
Sign up to request clarification or add additional context in comments.

4 Comments

Getting Error :Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at Comp10152_linkedlist.SimpleArrayList.remove at Comp10152_linkedlist.Comp10152_Lab4.main
woops, forgot to compensate for the loss of the element on the second array copy. Fixed.
So could you please help me out. Bcoz I m jst new in java and i dont know even basic code for this , If you can write whole code for removing element. Please...
...I thought I did? Unit test added that proves this.
0

Iterate through the list , check for the string if it gets matched remove and return 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;
        }    
   }

Removes the first occurrence of the specified element from this list, if it is present. If the list does not contain the element, it is unchanged.

7 Comments

the op is implementing the array list
His underlying data struct is an array of String, so you're also going to have to rearrange the remaining elements as well as adjusting the count of elements and potentially resizing the array list.
@Mars should it be done manually ? thought it will be done automatically
@SanKrish As Kick Buttowski pointed out, the OP is not using an array list, but rather, he's writing his own implementation of array list.
Not worked. can't access list.size() & list.get() method. Getting error at this.
|
0

How to acheive with java generic collections, please refer below solution:

Multiple Delete: For multiple occurrences of given string value

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;
}

For Single Delete: multiple/single occurrence(s)

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;
}

Hope this helps....

References:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.