Стеки - почему НАЖАТИЕ и POP?

Наконец, я получил лучшее решение;

Ниже приведен код адаптера для таймера обратного отсчета

    public class RestaurantListDetailAdapter extends RecyclerView.Adapter<RestaurantListDetailAdapter.ResturantDashboardViewHolder> implements Filterable {

    ArrayList<RestaurantListDetail.DataModel.ResultList> resturantList = new ArrayList<>();
    Context mContext;
    Utils utils;
    String latitude, longitude;
    OffersAdapter offersAdapter;
    private ArrayList<RestaurantListDetail.DataModel.ResultList> mFilteredList;

    public RestaurantListDetailAdapter(ArrayList res, Context mContext, String latitude, String longitude) {
        this.resturantList = res;
        this.mContext = mContext;
        this.latitude = latitude;
        this.longitude = longitude;

        long maxTime = 0;
        for (RestaurantListDetail.DataModel.ResultList item : resturantList) {
            if (!item.getRemainingTime().equalsIgnoreCase("")) {
                maxTime = Long.parseLong(item.getRemainingTime());
            }
        }

        new CountDownTimer(maxTime, 1000) {
            @Override
            public void onTick(long l) {

                for (int i = 0, dataLength = resturantList.size(); i < dataLength; i++) {
                    RestaurantListDetail.DataModel.ResultList item = resturantList.get(i);
                    if (!item.getRemainingTime().equalsIgnoreCase("")) {
                        item.setRemainingTime(String.valueOf(Long.parseLong(item.getRemainingTime())-1000)) ;
                    }
                }

                //remove the expired items
                //Iterator<RestaurantListDetail.DataModel.ResultList> dataIterator = resturantList.iterator();
                //while (dataIterator.hasNext()) {
                //RestaurantListDetail.DataModel.ResultList rd = dataIterator.next();
                //if (rd.getRemainingTime().equalsIgnoreCase("")) {
                //          dataIterator.remove();
                //                        }
                //                    }
                notifyDataSetChanged();
            }

            @Override
            public void onFinish() {
            // resturantList.clear();
            // notifyDataSetChanged();
            }
        }.start();

    }

    @Override
    public ResturantDashboardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.dashboard_search_item, parent, false);
        ResturantDashboardViewHolder viewHolder = new ResturantDashboardViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ResturantDashboardViewHolder holder, final int position) {
        final RestaurantListDetail.DataModel.ResultList resturantDetails = resturantList.get(position);

        if (!resturantDetails.getRemainingTime().equalsIgnoreCase(""))
        {
            long seconds = Long.parseLong(resturantDetails.getRemainingTime()) / 1000;
            long minutes = seconds / 60;

            holder.tvHour   .setText(String.format("%02d", TimeUnit.MILLISECONDS.toHours(Long.parseLong(resturantDetails.getRemainingTime()))));
            holder.tvMinutes.setText(String.format("%02d",minutes % 60));
            holder.tvSeconds.setText(String.format("%02d",seconds % 60));
        }

    }

    @Override
    public int getItemCount() {
        return resturantList.size();
    }


    public class ResturantDashboardViewHolder extends RecyclerView.ViewHolder {


        LinearLayout llBookingTable, ll_timer_slot, llOfferLayout, llOffers, rl_offer;
        TextView tv_resturantname, tvSeatLeft, tvListsTags, tvOffers, textView, tvHour, tvMinutes, tvSeconds, tvOutlets, tv_distance, tv_place, tv_rating, tvClosed, tvCostForTwo, tvOffer, tvSuburb;


        public ResturantDashboardViewHolder(View itemView) {
            super(itemView);

            tvOffers = itemView.findViewById(R.id.tvOffers);
            rl_offer = itemView.findViewById(R.id.rl_offer);
            tvSeatLeft = itemView.findViewById(R.id.tvSeatLeft);
            tvListsTags = itemView.findViewById(R.id.tvListsTags);
            textView = itemView.findViewById(R.id.textView);
            llOfferLayout = itemView.findViewById(R.id.llOfferLayout);

            llBookingTable = itemView.findViewById(R.id.llBookingTable);
            ll_timer_slot = itemView.findViewById(R.id.ll_timer_slot);
            tvHour = itemView.findViewById(R.id.tvHour);
            tvMinutes = itemView.findViewById(R.id.tvMinutes);
            tvSeconds = itemView.findViewById(R.id.tvSeconds);
            tvOutlets = itemView.findViewById(R.id.tvOutlets);
            llOffers = itemView.findViewById(R.id.llOffers);
            tvSuburb = itemView.findViewById(R.id.tvSuburb);
            tv_distance = itemView.findViewById(R.id.tv_distance);
            tv_place = itemView.findViewById(R.id.tv_resturant_place);
            tv_resturantname = itemView.findViewById(R.id.tv_resturant_item);
            tv_rating = itemView.findViewById(R.id.tv_rating);
            tvClosed = itemView.findViewById(R.id.tvClosed);
            tvCostForTwo = itemView.findViewById(R.id.tvCostForTwo);
            tvOffer = itemView.findViewById(R.id.tvOffer);
        }
    }

}
.
12
задан Daniel A. White 6 March 2017 в 03:13
поделиться

10 ответов

Я полагаю, что пружина загрузилась, стопка пластин корректна как источник для термина НАЖАТИЕ и НАСЕЛЕНИЕ.

В частности, Восточный Кампус, Кафетерий палаты общин в MIT имел пружину, загрузил стопки пластин в период времени 1957-1967. НАЖАТИЕ условий и POP использовались бы Техническим Клубом Модели железной дороги. Я думаю, что это - источник.

Технический Клуб Модели железной дороги определенно влиял на дизайн PDP-6 Digital Equipment Corporation (DEC). PDP-6 был одной из первых машин, которые будут иметь инструкции со стековой организацией в аппаратных средствах. Инструкции были НАЖАТИЕМ, POP, PUSHJ, POPJ.

http://ed-thelen.org/comp-hist/pdp-6.html#Special%20Features

13
ответ дан 2 December 2019 в 02:54
поделиться

Для второго вопроса: Ассемблерные программисты в маленьких системах склонны писать код, который начинается в низких адресах в памяти, и вырастите до более высоких адресов, поскольку добавляется больше кода.

Из-за этого, заставляя стек стать нисходящими позволяет Вам запускать стек во главе физической памяти и позволять двум зонам памяти расти друг к другу. Это упрощает управление памятью в этом виде тривиальной среды.

Даже в системе с зафиксированными данными отдельного ROM/RAM выделения является самым легким создать с самого начала и таким образом заменить часть кода вышеупомянутого объяснения.

В то время как такие тривиальные схемы памяти больше очень редки, аппаратная практика продолжается, как установлено.

13
ответ дан 2 December 2019 в 02:54
поделиться

Думайте о нем как pez фармацевт. Можно продвинуть новый на вершине. И затем вытолкайте его от вершины.

Это всегда, о чем я думаю, когда я думаю нажатие и население (Вероятно, не очень исторический хотя)

Вы спрашиваете себя, какого черта PEZ? См. комментарии.

6
ответ дан 2 December 2019 в 02:54
поделиться

Аллитерация всегда привлекательна (см. то, что я сделал там?), и эти слова являются короткими, аллитерирующими, и наводящими на размышления. То же идет для старых ОСНОВНЫХ команд, посмотрели и вводят по абсолютному адресу, которые имеют дополнительное преимущество параллельного k's.

Общая физическая метафора является фармацевтом пластины кафетерия, где пружинная стопка пластин делает ее так, чтобы можно было взять пластину от вершины, но следующая пластина повышается, чтобы быть в том же положении.

5
ответ дан 2 December 2019 в 02:54
поделиться

Ре Ваш "второй тривиальный вопрос": я видел значительное несоответствие в определении, что и "вниз" означает! С первых лет некоторые производители и авторы нарисовали схемы памяти с низкими адресами в верхней части страницы (по-видимому, имитирующий порядок, в котором страница прочитана), в то время как другие помещают высокие адреса в верхней части страницы (по-видимому, имитирующий координаты миллиметровки или этажи в здании).

Конечно, понятие стека (и понятие адресуемой памяти также) независимы от таких визуальных метафор. Можно реализовать стек, который "растет" в любом направлении. На самом деле я часто видел, что прием ниже (в реализациях уровня без операционной системы) раньше совместно использовал регион памяти между двумя стеками:

+---+---+--------   -------+--+--+--+
|   |   |   ->   ...   <-  |  |  |  |
+---+---+--------   -------+--+--+--+
^                                   ^
Stack 1      both stacks      Stack 2
base        "grow" toward        base
              the middle

Таким образом, мой ответ - то, что стеки концептуально никогда не растут или "вниз" или "вверх" но просто растут от их основы. Отдельный стек может быть реализован или в направлении (или ни в каком направлении, если это использует связанное представление со сборкой "мусора", в этом случае элементы могут быть где угодно в nodespace).

5
ответ дан 2 December 2019 в 02:54
поделиться

Ответы на этой странице в значительной степени отвечают на вопрос направления стека. Если бы я должен был подвести итог его, то я сказал бы, что это сделано вниз, чтобы остаться согласовывающимся с древними компьютерами.

2
ответ дан 2 December 2019 в 02:54
поделиться

Я думаю, что исходная история появилась из-за некоторых разработчиков, видящих стопку пластины (как Вы, часто смотрите в ресторанах самообслуживания). Вы продвинули новую пластину на вершине стека, и Вы появились один от вершины также.

0
ответ дан 2 December 2019 в 02:54
поделиться

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

0
ответ дан 2 December 2019 в 02:54
поделиться

Для Вашего второго вопроса Википедия имеет статью о философии CS, которая управляет стеком:

http://en.wikipedia.org/wiki/LIFO

И для первого, также на Википедию:

Часто используемая метафора является идеей стопки пластин, пружиной загрузил стопку кафетерия. В таком стеке только главная пластина видима и доступна для пользователя, все другие пластины остаются скрытыми. Поскольку новые пластины добавляются, каждая новая пластина становится вершиной стека, скрывая каждую пластину ниже, снижая стопку пластин. Когда главная пластина удалена из стека, они могут использоваться, пластины раскрываются назад, и вторая пластина становится вершиной стека. Два важных принципа проиллюстрированы этой метафорой: принцип Метода "последним пришел - первым вышел" является тем; второе - то, что содержание стека скрыто. Только главная пластина видима, так для наблюдения то, что находится на третьей пластине, первые и вторые пластины должны будут быть удалены. Это может также быть записано как Первым пришел-последним вышел FILO, т.е. запись вставила, сначала будет высунут наконец.

22
ответ дан 2 December 2019 в 02:54
поделиться

Я знаю, что этот поток действительно старый, но у меня есть мысль по поводу второго вопроса:

На мой взгляд, стек растет, хотя адреса памяти уменьшаются. Если бы вы написали на листе бумаги целую кучу чисел, вы бы начали с нуля в верхнем левом углу. Затем вы бы увеличивали числа слева направо, а затем сверху вниз. Скажем, стек выглядит следующим образом:

000 001 002 003 004     000 001 002 003 004     000 001 002 003 004
005 006 007 008 009     005 006 007 008 009     005 006 007 008 009
010 011 012 013 014     010 011 012 013 014     010 011 012 013 014
015 016 017 018 019     015 016 017 018 019     015 016 017 018 019
020 021 022 023 024     020 021 022 023 024     020 021 022 023 024
025 026 027 028 029     025 026 027 028 029     025 026 027 028 029

где жирные числа представляют стековую память, а жирные числа представляют адреса памяти, которые стек не использует. Каждый блок с одинаковыми числами представляет собой этап программы, на котором стек вызовов увеличился.

Несмотря на то, что адреса памяти перемещаются вниз, стек растет вверх.

Аналогично, с подпружиненным стеком пластин,

1125125] если бы вы сняли тарелку с вершины стопки, вы бы назвали ее первой тарелкой (наименьшим числом), верно? Даже думал, что это на самом высоком уровне. Программист мог бы даже назвать это нулевой пластиной.

0
ответ дан 2 December 2019 в 02:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: