Получить 5 лучших данных из стека - PullRequest
0 голосов
/ 25 августа 2011

Я использую структуру данных стека Java для поддержки данных.Я ограничил свой стек размером 50. Что я хочу сделать, так это получить последние 5 данных из стека за один вызов.Я думал, что метод sublist (0,5) сделает это.Но, к сожалению, метод возвращает последние 5 данных, поскольку этот метод унаследован от java.util.list, есть ли способ сделать это.Или есть какая-то другая структура данных, которая удовлетворяет моему требованию.Пожалуйста, помогите мне.Заранее спасибо.

Ps Я хочу сохранить последние 5 данных в стеке после того, как я получу.

 Stack stack = new Stack();
        for(int i=0; i<10;i++){
            stack.push(""+i);
        }
        for(int k= 0 ;k<11;k++){
            System.out.println(stack.subList(0,5));
        }

выход из этого будет {0,1,2,3,4}.Но я хочу получить {9,8,7,6,5}

Ответы [ 3 ]

3 голосов
/ 25 августа 2011

реализация стека по умолчанию не имеет необходимого вам метода. вам придется выткать () ваш стек 5 раз.

Поэтому я предлагаю расширить реализацию стека или написать вспомогательный метод, который группирует 5 всплывающих окон.

что-то вроде:

public static <T> List<T> multiPop( Stack<T> stack, int times)
  {
    List<T> list = new ArrayList<T>();
    for ( int i = 0;i<times;i++)
      {
      list.add(stack.pop());
      }
    return list;
  }

но нужно будет подумать о поведении каждого попса

если вам нужен мультипик

 public static <T> List<T> multiPeek( Stack<T> stack, int depth )
  {
    int len = stack.size();
    if ( len < depth )
      throw new EmptyStackException();
    List<T> list = new ArrayList<T>();
    for (int i = 0; i < depth; i++)
      {
      list.add(stack.elementAt(len-i-1));
      }
    return list;
  }
2 голосов
/ 25 августа 2011

Если sublist(0,5) возвращает неправильный конец вашего стека, попробуйте изменить ваши индексы. Вместо того, чтобы начинать с 0, начинайте с stack.size()-6.

Как уже отмечали другие, вы также можете pop() 5 раз. В функциональных языках искомая операция просто называется take 5. Это легко реализовать самостоятельно, но вам нужно получить собственный класс стека в Java.

Еще один важный момент: когда вы pop() 5 раз, эти элементы будут удалены из стека. Это может или не может быть то, что вы намерены. Однако имейте в виду, что sublist вернет вам список, который может изменить сам стек, так что вы можете легко столкнуться с проблемами целостности.

Поэтому я предлагаю вам написать свой собственный класс стека и реализовать метод take(n), который выполняет вызов sublist и копирует результаты в новый список, так что окончательно возвращенный список не может повлиять на ваш исходный стек.

0 голосов
/ 25 августа 2011

обычно, если у вас есть реальный стек, у вас будет метод pop.Стек не совсем прямой список.Вы можете выскочить 5 раз, но вам нужно убедиться, что есть что-то, что могло бы снять стек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...