Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Циклическая очередь, Помогите подобрать класс 
:(
    Опции темы
mulya
Дата 6.7.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.5.2006

Репутация: нет
Всего: нет



Мне нужна циклическая модификация очереди, то есть очередь по которой можно передвигаться используя метод Next до бесконечности. Проблема в том что я не знаю есть ли в Java стандартный класс подходящий моим запросам, может кто знает, а пока пользуюсь своим, но не радует. Заранее спасибо.
 
PM MAIL   Вверх
Bulat
Дата 6.7.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 4
Всего: 57



mulya, а можешь поподробнее выложить проблему? 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
mulya
Дата 6.7.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.5.2006

Репутация: нет
Всего: нет



Даже не знаю, что ещё написать. Вобщем мне нужен стандартная реализация Collection (нечто вроде Set), только с одной дополнительной фишкой, метод next(или подобный) должен выполняться всегда, то есть доходя до последнего элемента коллекции он должен переходить на первый, этим я и подразумеваю "цикличность". 
PM MAIL   Вверх
Bulat
Дата 6.7.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 4
Всего: 57



mulya, бесконечный цикл. Может есть что-то что само переходит на первый элемент после последнего по умолчанию, я не знаю smile . Но можно через иф перебрасывать на первый элемент использую методы типа afterlast, first и т.п. Конкретной реализации не знаю, не приходилось еще с таким сталкиваться, щас модераторы откликнуться, они-то точно все выложут, помогут. 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
mulya
Дата 6.7.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.5.2006

Репутация: нет
Всего: нет



Моя реализация этой задумки как раз и выполняет проверку последнего элемента и переходит на первый, но дело в том что для меня очень важна скорость, по этому я ищу стандартную реализацию. На СИ для таких вещей использовал структуры, одним из элементов которой являлся указатель на объект данной структуры, то есть, с указателями это сделать "как два пальца", но в Java же нет указателей, ведь так? 
PM MAIL   Вверх
Bulat
Дата 6.7.2006, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 4
Всего: 57



mulya, но в ява для коллекций есть методы типа last, first и т.п. Попробуй с ними помудрить, не зряж они были придуманы smile  


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
chief39
Дата 6.7.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Сделай обёртку над какой-либо Коллекцией.

Получаешь итератор обёртки -> он получает и содержит итератор коллекции.
next() проверяет коллекцию на hasnext() - если нету - заново получить у коллекции итератор и сохранить его в итераторе обёртки. Можешь унаследовать  какую-то из коллекций, закрыть доступ к стандартному итератору и "открыть для паблик" свой. А он будет работать со стандартным, как я уже описал 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
last
Дата 10.7.2006, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



Примерная реализация:

nextIndex() и previousIndex() нереализовывал ибо лень  smile 
кроме того понятие "индекс" плохо вписываеться в концепцию циклической очереди

при желании их можно легко реализовать также как и next(), previous(), только не объект возвращать, а его индекс

Код

package test.util;

import java.util.*;
//import org.junit.*;

public class CircleList<E> extends LinkedList<E> {
    
    private final class CircleIterator implements ListIterator<E> {
        private ListIterator<E> i = CircleList.super.listIterator();
        
        public boolean hasNext() {
            if (CircleList.this.size() != 0)
                return true;
            return false;
        }
        
        public boolean hasPrevious() {
            return hasNext();
        }
        
        public void remove() {
            i.remove();
        }
        
        public E previous() {
            if (i.hasPrevious())
                return i.previous();
            i = CircleList.super.listIterator();
            while (i.hasNext()) 
                next(); //reset iterator and goto to end of list
            if (i.hasPrevious()) 
                return i.previous();            
            throw new NoSuchElementException();
        }
        
        public E next() {            
            if (i.hasNext()) 
                return i.next();           
            i = CircleList.super.listIterator(); //reset iterator and goto to begin of list
            if (i.hasNext()) 
                return i.next();            
            throw new NoSuchElementException();                
        }
        
        public void set(E o) {
            i.set(o);
        }
        
        public void add(E o) {
            i.add(o);
        }
        
        /**
         * Unsupported operation
         */
        public int nextIndex() {
            throw new UnsupportedOperationException();            
        }
        
        /**
         * Unsupported operation
         */
        public int previousIndex() {
            throw new UnsupportedOperationException();
        }
    }
    
    public CircleList() {
    }
    
    public CircleList(Collection<? extends E> c) {
        super(c);
    }
    
    public Iterator<E> iterator() {
        return listIterator();        
    }
    
    public ListIterator<E> listIterator() {
        return new CircleIterator();
    }
    
    /*
     * ФЕУФПЧЩК НЕФПД, ДПМЦЕО ОБРЕЮБФБФШ "absdabc" "cbadcbadcb"
     */
     //  @Test
    public static  void main(String [] args) {
        String [] s = {"a","b","c","d"};
        String test = "";
        CircleList<String> circleList = new CircleList<String>(Arrays.asList(s));        
        ListIterator<String> iter = circleList.listIterator();
        for (int i = 0 ; i < 7; i++) {
            test += iter.next();            
        }                
        //Assert.assertTrue("Error in CircleList implementation",test.equals("abcdabc"));
        System.out.println(test);
        
        test = "";
        for (int i = 0 ; i < 10; i++) {
            test += iter.previous();            
        }
        //Assert.assertTrue("Error in CircleList implementation",test.equals("cbadcbadcb"));
        System.out.println(test);    
    }

 
PM MAIL   Вверх
mulya
Дата 10.7.2006, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.5.2006

Репутация: нет
Всего: нет



Спасибо 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1145 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.