首页
学习
活动
专区
圈层
工具
发布

数据结构-栈结构

当栈中有空闲空间时,入栈操作的时间复杂度为 O(1)。但当空间不够时,就需要重新申请内存和数据搬移,所以时间复杂度就变成了 O(n)。...当扫描到左括号时,则将其压入栈中;当扫描到右括号时,从栈顶取出一个左括号。如果能够匹配,比如“(”跟“)”匹配,“[”跟“]”匹配,“{”跟“}”匹配,则继续扫描剩下的字符串。...当所有的括号都扫描完成之后,如果栈为空,则说明字符串为合法格式;否则,说明有未匹配的左括号,为非法格式。...代码实现 基于数组实现的栈 基于链表实现的栈 使用前后栈实现浏览器的前进后退 我们使用两个栈,X 和 Y,我们把首次浏览的页面依次压入栈 X,当点击后退按钮时,再依次从栈 X 中出栈,并将出栈的数据依次放入栈...当我们点击前进按钮时,我们依次从栈 Y 中取出数据,放入栈 X 中。当栈 X 中没有数据时,那就说明没有页面可以继续后退浏览了。当栈 Y 中没有数据,那就说明没有页面可以点击前进按钮浏览了。

47510

Android入门教程 | Fragment 基础概念

不过,当 Activity 正在运行(处于已恢复生命周期状态)时,可以独立操纵每个片段,如添加或移除片段。...(请注意,显示列表的首选方法是使用 RecyclerView,而非 ListView。在此情况下,需在列表布局中创建包含 RecyclerView 的片段。...savedInstanceState 参数是在恢复片段时,提供上一片段实例相关数据的 Bundle(处理片段生命周期部分对恢复状态做了详细阐述)。...注意:每个片段都需要唯一标识符,重启 Activity 时,系统可使用该标识符来恢复片段(也可以使用该标识符来捕获片段,从而执行某些事务,如将其移除)。...不过,如果在删除片段时调用 addToBackStack(),则系统会停止该片段,并随后在用户回退时将其恢复。

4.5K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    搞定数据结构-栈和队列

    ,当栈空间不够时,进行两倍的扩容,当栈中的元素个数小于栈空间的1/4时,进行缩容处理. ?...需要去执行B函数,此时将栈中压入一个信息叫做A2.这是执行B函数当执行到B函数的第二行时,需要去执行C函数,此时将在栈中压入一个信息叫做B2,然后执行C函数,当C函数执行完成之后,此时系统从栈顶中查找信息...其实我们只需要两个栈即可,一个栈X记录页面,一个栈Y记录后退的页面 点击前进按钮,依次从Y 栈中取出页面添加到X栈中,当Y栈为空时,就不能在前进了....点击后退按钮,一次从X栈中取出页面添加到Y栈中,当X栈为空时,就不能在后退了....图片来自-极客时间 如上图所示,我们通过head来标记队头,tail来标记队尾,当head==tail时队列为空.当(tail+1)%length == head时队列满了.循环队列会浪费1个存储空间

    58020

    移动开发作业一

    为每个选项卡页面准备一个对应的 Fragment。 2. Fragment: 创建 4 个不同的 Fragment 类,每个 Fragment 代表一个不同的选项卡页面。...XML 布局: 为每个 Fragment 创建对应的 XML 布局文件,用于定义该选项卡页面的界面元素。 在某一个 XML 布局中使用 RecyclerView 控件,用于显示列表效果。 4....LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, parent, false),从布局文件item_message.xml...图片 View对象view用于加载片段的布局,通过inflater.inflate方法将布局文件R.layout.wetalks填充到片段中。这个布局包含一个RecyclerView控件。...图片 这段代码是一个点击事件处理方法,在用户点击不同的视图元素时执行不同的操作。 由于Gradle的版本问题,不能使用switch-case语句,注意隐藏其他片段,以确保只显示一个特定的片段。

    51330

    怎么简单实现菜单拖拽排序的功能

    ,并且在绘制的时候会从集合中遍历所有的分割线绘制。...我们再来梳理一下: 两种不同的布局 都有分割线 分割线只需设置一次 我想到另外一个办法,不对RecyclerView做处理了,既然两种布局都有分割线,是不是可以把分割线合二为一了,然后根据LayoutManager...网格布局,选中变大 列表布局,背景变色 这里用到ItemTouchHelper.Callback中的两个方法,onSelectedChanged和clearView,我们需要在选中时改变视图显示,结束时再恢复...;同时,注意这里判断的主体是mRecyclerView,不是我们传进来的recyclerView,而且我们传进来的recyclerView是支持Nullable的,所以我们可以传个空值走到destroyCallbacks...里来做解绑操作 第三个if判断,当我们传的recyclerView不为空时,调用setupCallbacks 5.2、setupCallbacks private void setupCallbacks

    1.6K40

    怎么简单实现菜单拖拽排序的功能

    ,并且在绘制的时候会从集合中遍历所有的分割线绘制。...我们再来梳理一下:两种不同的布局都有分割线分割线只需设置一次我想到另外一个办法,不对RecyclerView做处理了,既然两种布局都有分割线,是不是可以把分割线合二为一了,然后根据LayoutManager...网格布局,选中变大列表布局,背景变色这里用到ItemTouchHelper.Callback中的两个方法,onSelectedChanged和clearView,我们需要在选中时改变视图显示,结束时再恢复...,这时我们要把改变后的item视图恢复到初始状态 override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder...里来做解绑操作3.第三个if判断,当我们传的recyclerView不为空时,调用setupCallbacks5.2、setupCallbacks private void setupCallbacks

    1.3K30

    Android 中意料之外的应用崩溃以及它们的解决方案

    在 Android 中,从后台状态恢复应用程序时可能会产生崩溃 —— 此类崩溃是意外发生的,而且仅通过查看崩溃日志,我们很难理解崩溃的具体原因以及解决问题,而本文讨论了此类问题及其解决方法。...问题 在监视产品的崩溃日志时,我注意到一些问题与日俱增。该应用在正常测试条件下似乎运行良好,并且崩溃不可复现,直到应用程序从后台任务中进入前台。...当应用程序进程被终止的时候,所有的单例对象和临时数据都同时丢失了,而现在如果你返回你的应用程序,系统会创建一个新的进程,而你的应用程序会从你退出时候的 Activity 栈顶执行 Resume 函数恢复该...由于此时你的所有的单例对象都丢失了,因此当这个 Activity 尝试访问相同的对象时,就会遇到空指针异常而崩溃退出。 这是个问题。在我们继续讨论解决方案之前,让我们复现一下这种情况。...根据你所处的情况,你可以决定用哪一个方法来推进问题的解决: 解决方案 1: 一种简便的解决方案是,当用户从后台恢复应用程序时,让应用程序检查我们现有的应用程序进程是否被结束并重新创建。

    1.5K10

    Android必知必会 - RecyclerView 恢复上次滚动位置

    记录 RecyclerView 滚动位置并恢复是一个很常见的需求,通常需要精准恢复到上次的位置。...完成绘制」时,记录首个元素的偏移量作为基础偏移量;此步非必须流程,根据自己实际情况看是否需要,有些情况此基础偏移量为0,即不存在基础偏移量的问题; 在「监听 RecyclerView 滚动状态」里,滚动结束时...,记录最左侧的元素坐标和偏移量; 再次打开当前页面时,检查是否存在偏移量信息的记录,有则进行位置恢复,即「滚动 RecyclerView 到指定的位置」。...== null) { return; } rvOffset = leftView.getLeft(); //获取该view的左边的偏移量,垂直布局时获取...().removeOnGlobalLayoutListener(this); } }); } //在合适的时机,比如 onResume() 或者获取完数据后进行位置恢复 if (linearLayoutManager

    2.4K20

    RecyclerView 必知必会

    这个问题的原因是当调用notifyItemChanged()时,会调用DefaultItemAnimator的animateChangeImpl()执行change动画,该动画会使得Item的透明度从0...添加setEmptyView ListView提供了setEmptyView()设置Adapter数据为空时的View视图。RecyclerView虽然没提供直接的API,但是也可以很简单地实现。...通过getRootView().addView(emptyView)将空数据时显示的View添加到当前View的层次结构中。...通过AdapterDataObserver监听RecyclerView的数据变化,如果adapter为空,那么隐藏RecyclerView,显示EmptyView。 具体实现如下: ?...回顾 回顾整篇文章,发现我们已经实现了RecyclerView的很多扩展功能,包括:打造万能适配器、添加Item事件、添加头视图和尾视图、设置空布局、侧滑拖拽。

    4.8K90

    RecyclerView 必知必会

    这个问题的原因是当调用notifyItemChanged()时,会调用DefaultItemAnimator的animateChangeImpl()执行change动画,该动画会使得Item的透明度从0...添加setEmptyView ListView提供了setEmptyView()设置Adapter数据为空时的View视图。RecyclerView虽然没提供直接的API,但是也可以很简单地实现。...通过getRootView().addView(emptyView)将空数据时显示的View添加到当前View的层次结构中。...通过AdapterDataObserver监听RecyclerView的数据变化,如果adapter为空,那么隐藏RecyclerView,显示EmptyView。 具体实现如下: ?...回顾 回顾整篇文章,发现我们已经实现了RecyclerView的很多扩展功能,包括:打造万能适配器、添加Item事件、添加头视图和尾视图、设置空布局、侧滑拖拽。

    3.2K70

    精选Android中高级面试题:性能优化,JNI,设计模式

    内存判定对象可回收有两种机制: 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加 1;当引用失效时,计数器值就减 1;任何时刻计数器为 0 的对象就是不可能再被使用的。...,这时候仍然不会立即释放该对象内存,因为有些对象是可恢复的(在 finalize 方法中恢复引用 )。...只有确定了对象无法恢复引用的时候才会清除对象内存。...两次判空的目的又是什么 ? 参考回答:单例模式实现方法有多种:饿汉,懒汉 (线程安全,线程非安全),双重检查 (DCL), 内部类,以及枚举。...所谓双层检验锁(在加锁前后对实例对象进行两次判空的检验):加锁是为了第一次对象实例化的线程同步,而锁内还要有第二层判空是因为可能会有多个线程进入第一层 if 判断内部,而在加锁代码块外排队等候,如果锁内不进行第二次检验

    3K30
    领券