2014-11-04 2 views
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(); 
     } 
    } 

Я называю этот метод класса Simplearraylist классом ниже основного класса. И я не знаю, как реализовать метод remove в классе SimpleArrayList. Может ли кто-нибудь дать мне решение для этого? И главное, я не хочу никаких изменений в основном классе. Мне просто нужен реализованный код метода удаления в соответствии с его вызовом в основном классе. /* * Чтобы изменить этот заголовок лицензии, выберите «Заголовки лицензий» в «Свойства проекта». * Чтобы изменить этот шаблонный файл, выберите «Инструменты» | Шаблоны * и откройте шаблон в редакторе. */Добавить и удалить элемент в ArrayList

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); 
    }  
} 
+0

Вы используете класс ArrayList? –

+1

, если вы расширяете ArrayList, чем проверяете его исходный код, чтобы получить от него помощь, слышите, что у меня есть http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/ util/ArrayList.java –

ответ

0

Итерация по списку, проверьте строку, если она будет соответствовать удалить и вернуть истинный

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

Удаляет первое вхождение указанного элемента из этого списка, если он присутствует. Если список не содержит элемент, он равен без изменений.

+0

op реализует список массивов –

+1

Его базовая структура данных представляет собой массив String, поэтому вам также придется переупорядочить остальные элементы, а также настроить количество элементов и потенциально изменить размер массива список. – MarsAtomic

+0

@ Марс должен быть сделан вручную? подумал, что это будет сделано автоматически –

1

Предполагая, что вы должны удалить только первый вхождение, то ArrayList # удалить (Object) метод IAW:

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: добавлен тестовый модуль для метода удалить

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

} 
+0

Получение ошибки: Исключение в потоке "главный" java.lang.ArrayIndexOutOfBoundsException \t на java.lang.System.arraycopy (Native Method) \t на Comp10152_linkedlist.SimpleArrayList.remove \t в Comp10152_linkedlist.Comp10152_Lab4. main –

+0

woops, забыл компенсировать потерю элемента во второй копии массива. Исправлена. –

+0

Так что, пожалуйста, помогите мне. Bcoz I m jst new в java, и я не знаю даже базового кода для этого, если вы можете написать весь код для удаления элемента. Пожалуйста ... –

0

Как с использованием коллекций java generic, см. ниже решение:

Несколько удалений: для множественного появления ences от заданного значения строки

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

Для одного Удаления: множественный/однократный (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; 
} 

Надежда это помогает ....

Ссылка:

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

Смежные вопросы