2016-03-07 3 views
1

У меня есть способ добавить коллекцию общих элементов в мой массив, но не знаю, как это реализовать. Я обозначил строку кода, с которой у меня возникли проблемы с COLLECTION. Я не знаю, что писать вместо этого. Мой массив представляет собой круглый кольцевой массив.Как добавить коллекцию элементов в массив?

import java.util.Collection; 
import java.util.Iterator; 

public class CircularArrayRing<E> implements Ring<E> { 

    public E[] elements; //array of E 

    private int capacity; 
    private int writePos = 0; 
    private int available = 0; 

    public CircularArrayRing(int size) { //circular array constructor 

     capacity = size; 

    } 


    public boolean add(E e) { 

     if(available < capacity){ 
      if(writePos >= capacity){ 
       writePos = 0; 
      } 
      elements[writePos] = e;  //add element e 
      writePos++; 
      available--; 
      return true; 
     } 

     return false; 

    } 

    public boolean addAll(Collection<? extends E> c) { 

     if(available < capacity){ 
      if(writePos >= capacity){ 
       writePos = 0; 
      } 
      elements[writePos] = COLLECTION; //how do add a collection of elements? 
      writePos++; 
      available++; 
      return true; 
     } 

     return false; 
    } 
} 
+1

Итерируйте по коллекции, увеличивайте позицию записи для каждого элемента и задайте элемент в этом положении. Это в основном то же самое, что и для (E e: c) {add (e); } '- и я бы, вероятно, использовал его таким образом. Просто продолжайте отслеживать, возвращают ли значения и действуют, если вы получите 'false', или еще лучше проверьте' available> = c.size() 'перед выполнением цикла. – Thomas

+1

Боковое примечание: Я думаю, 'available ++;' не то, что вы хотите в 'addAll()'. – Thomas

+1

Дополнительная примечание стороны: что означает 'доступная <емкость'? Я предполагаю, что вы скорее хотите инициализировать 'available' значением' capacity', а затем проверить 'available> 0'. – Thomas

ответ

3

Как насчет итерации и запуска add() один за другим?

public boolean addAll(Collection<? extends E> c){ 
    for(E e : c){ 
    add(e); 
    } 
} 
0

Вот некоторые примеры:

public void testCollectionAdd() { 
    if (!isAddSupported()) return; 

    Object[] elements = getFullElements(); 
    for (int i = 0; i < elements.length; i++) { 
     resetEmpty(); 
     boolean r = collection.add(elements[i]); 
     confirmed.add(elements[i]); 
     verify(); 
     assertTrue("Empty collection changed after add", r); 
     assertTrue("Collection size is 1 after first add", 
        collection.size() == 1); 
    } 

    resetEmpty(); 
    int size = 0; 
    for (int i = 0; i < elements.length; i++) { 
     boolean r = collection.add(elements[i]); 
     confirmed.add(elements[i]); 
     verify(); 
     if (r) size++; 
     assertEquals("Collection size should grow after add", 
        size, collection.size()); 
     assertTrue("Collection should contain added element", 
        collection.contains(elements[i])); 
    } 
} 

Полный код здесь:

http://code.openhub.net/file?fid=WKY7Buaz9RI_B0BqM_HKnkm6lqY&cid=9RkvURzZ1wM&s=How%20to%20Add%20a%20collection%20of%20elements%20to%20my%20array%3F&pp=0&fl=Java&ff=1&projSelected=false&filterChecked,=true&mp,=1&filterChecked=true&mp=1&ml=1&me=1&md=1#L79

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