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

Java实现给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

By 张旭 CaesarChang 合作 : root121toor@gmail.com 关注我 带你看更多好的技术知识和面试题 给定一个链表,判断链表中是否有环。...为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。...* class ListNode { * int val; * ListNode next; * ListNode(int x) { * val =...=fast.next.next; slow=slow.next; } return false; } } 使用快慢指针,刚开始快比慢快1,...然后快走2 慢走1, 总会碰到.

1.3K20

使用 ConcatAdapter 顺序连接其他 Adapter

这方面的一个用例,是在列表头部和底部显示加载状态: 当列表从网络中检索数据时,我们想显示一个加载中的图标;如果出现错误,我们要显示错误信息和重试按钮。...要获得完整的实现,请查看这里 拉取请求,它添加了: 从 ViewModel 中暴露出来的 LoadState 显示加载状态的头部和底部的布局 头部和底部的 ViewHolder 对象 一个 ListAdapter...,它基于 LoadState 显示 1 或 0 个项目,每次 LoadState 有变动的时候,我们会通知相应条目进行改动、插入或移除 (您可以在 拉取请求 中查看相应的代码)。...我们可以在构造 ConcatAdapter 时使用一个 ConcatAdapter.Config 对象来实现这样的效果。...数据变更通知 当 ConcatAdapter 中的一个 Adapter 调用了通知函数时,ConcatAdapter 会在更新 RecyclerView 之前计算新的项目位置。

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

    优雅地实现RecyclerView的上拉加载

    RecylerView 上拉加载更多 上拉加载的多状态 ---- 这篇博客是承接上一篇博客--探索Android架构的DataLayer层(DataManager方式)具体实现,其实是上篇博客的一个使用比较普遍的例子...至于通常的下拉刷新我同意Google设计下拉刷新的理念,即下拉刷新是View的行为,应该让View自己来实现,而下拉刷新有着更加广泛的应用,几乎需要交互的信息显示界面都是需要下拉刷新功能的。...先谈谈思路,其实很简单,就是通过getItemViewType()加载不同的布局,这里就是把加载更多布局封装进adapter中。...的值是-1,直接让adpater实现上面这个接口,这里直接贴出adapter的代码: public class ArticleAdapter extends RecyclerView.Adapter中如何使用,我今天写的这个其实是上一篇博客的继续或者例子。

    1.3K40

    实习入职第二十天:从setRecyclerListener看listView回收机制

    获取mActiveViews中指定位置的view,如果找到会将该view从mActiveViews中移除。...第三种情况,这个最简单: 一开始,listview稳定后,显示N个,此时mScrapView中是没有缓存view的,当我们向上滚动一小段距离(第一个此时仍显示部分),新的view将会显示,此时listview...item view时,此时,系统会从mScrapView中找position对应的View,显然,是找不到的,则将从mScrapView中,取最后一个缓存的view传递给convertView;         ...从注释看,不可见的item 的自动移除是在scrollListItemsBy中进行的。...RecycleBin相当于一个临时存储不需要显示的那部分Views的对象,随着列表滑动,这些Views需要显示出来的时候,他们就被从RecycleBin中拿了出来,RecycleBin本身并不对mScrapViews

    1.2K10

    Adapter分组封装

    支持局部插入刷新,局部移除刷新,也就是说可以按组插入或者移除数据,或者按组中child的某个未知插入或者移除数据。 支持组中header,footer,child的各个视图view的自定义点击事件。...有时候,在分组控件中,有的组不想显示header,有的组不想显示footer,那么这个时候就不太灵活。能否使用一个开关方法来控制header和footer的显示和隐藏呢?...4.4 分组实体bean 通过GroupStructure记录每个组是否有头部,是否有尾部和子项的数量。从而能方便的计算列表的长度和每个组的组头、组尾和子项在列表中的位置。...这个方法中主要做两个事情,第一个是设置组中的header,footer,还有children的点击事件,并且需要返回具体的索引,包括组索引,和组中孩子的索引。...而且支持局部插入刷新,局部移除刷新,也就是说可以按组插入或者移除数据,或者按组中child的某个未知插入或者移除数据。

    2.1K00

    Android ListView 分组效果实现「建议收藏」

    返回的值是3,那么每个item可能就会有0,1,2三个缓存复用的对象,这个时候getItemViewType返回的是0,这样就会用0这个对象去复用。...1). 内部类Category 这个没什么东西包含一个BaseAdapter对象和一些必要的方法, 因为我们在MobileCategoryAdatper里面肯定是会有List对象的。 2)....因为我们要ListView.setOnClickListener这个类的对象。 在这个类中我们会区分当前点击的是title(点击的时候我们可能会展开和收缩该分组)还是item。...3). getViewTypeCount() 1+每个Category中Adpater的ViewType。加1可以想象是每个Category都有一个标题。...return -1; } 如果是标题的位置时候返回的是0类型,每个Catatory的ViewType则是慢慢的往上加的。

    83510

    一篇博客理解Recyclerview的使用

    从Android 5.0开始,谷歌公司推出了RecylerView控件,当看到RecylerView这个新控件的时候,大部分人会首先发出一个疑问,recylerview是什么?...为什么会有recylerview也就是说recylerview的优点是什么?recylerview怎么用?等等,下面我们将深入解析recylerview。 1.RecyclerView是什么?...RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字Recyclerview即回收view也可以看出...,然后在onTouchEvent中,监听ACTION_MOVE,用户手指滑动时,不断把当前第一个View回调回去 关于为什么getChildAt(0)和getChildPosition()可用,起初我以为有...,就是我们在适配器中绑定ViewHolder的方法中需要重新给我们的itemView布局设置height,这里是生成随机数来设置高度的。

    1.2K30

    android常见bug跟踪

    前言 对app的线上bug的收集(友盟、云捕等)有时会得到这样的异常堆栈信息:没有一行代码是有关自身程序代码的。...解决办法只能从根源上进行: 在我们编写getView方法时,对最终返回的参数自己进行非空判断,当针对不同position处的getItemViewType得到的View对象为null时,可以自己抛出一个...// 在自己的Adapter子类中 @Override public View getView(int position, View convertView, ViewGroup parent) {...这里是根据getItemViewType生成不同View的逻辑,将View对象存储在convertView if (convertView == null) { // throw...注意:getView返回null从java语法上是没问题的,虽然根据约定,它返回null肯定会引发空指针异常——但是这是对调用getView的方法而言。

    1.3K50

    recyclerView源码解析

    Adpater的职责是对用数据对每个item进行填充。layoutManager的作用主要就是用摆放item的位置。...,是需要dispatchLayoutStep1,dispatchLayoutStep2,dispatchLayoutStep3这三步来执行的,step1里是进行预布局,主要跟记录数据更新时需要进行的动画所需的信息有关...当一个视图被分离时,它的父级为 null 并且不能通过调用getChildAt(int)来检索。...,多个RecyclerView可以指定使用一个pool对象private RecycledViewPool mRecyclerPool;//自定义的缓存机制对象,用户可以继承之实现自己的一个缓存对象,在指定时机会使用该对象里的缓存对象...recyclerView使用两个adapter,文本列表的相关逻辑用一个Adapter中实现的,处理Button列表相关的逻辑用另一个Adapter中实现的,这样以来就降低了代码的耦合性,并提高了代码的复用性

    1.2K00

    *Android面试实战总结2

    返回  getview 时 产生的 item 的 类型的个数,如果 我们的listview 中所有的item 只有一种类型 ,那么我们不需要复写这个方法,这个方法 当我们给listview  setAdapter...public int getViewTypeCount() {   return 1;      }   另一个方法  getItemViewType    Get the type...弱引用和软引用的区别是清空和将加入排队的时间点不同: 一个弱引用应该尽可能晚的被清除和加入队列,那是因为如果内存不足是vm将是危险的 弱引用对象是一旦知道引用的是弱获取对象就会被清除和入队。...public int getViewTypeCount() {   return 1;      }   另一个方法  getItemViewType    Get the type...弱引用和软引用的区别是清空和将加入排队的时间点不同: 一个弱引用应该尽可能晚的被清除和加入队列,那是因为如果内存不足是vm将是危险的 弱引用对象是一旦知道引用的是弱获取对象就会被清除和入队。

    50430

    【Android】RecyclerView多布局展示案例

    + 2 条广告,广告通过add(索引, 对象)插入到指定位置)。...2. getItemViewType(int position):确定每条数据的布局类型 重写adpter中的getItemViewType方法,根据不同的position决定里面到底显示成什么样 对每个位置...(作用:为不同数据匹配不同布局,实现多样式展示) 节点:已经完成了告诉recycleview返回一个不同的viewtype,这个viewtype是根据我们数据本身来做决定的; 现在要做的是:告诉recycelvie...) 绑定数据到控件对每个位置,将数据中的内容设置到ViewHolder缓存的控件中: 根据position获取对应Article对象和viewType。...(作用:将数据源中的数据 “填充” 到布局控件中,最终展示到屏幕上) 我只能说非常这一集炸裂,搞了好久,终于从宏观角度把代码逻辑梳理清楚了 package com.xlong.myapplication.recyclerview

    30310

    Android RecyclerView浅析(分类型)

    设置点击事件有两种: 方式一:在Adapter的onBindViewHolder()方法中设置,也可以定义一个接口回调,让MainAcitivity实现自定义的接口,然后在MainActivity设置接口回调的监听即可...创建一个ViewHolder(),一般为加载一个布局文件,注意此处inflate和LayoutInflater的区别 6.分类型的RecyclerView 6.1重写方法和和一般的类似,多了一个getItemViewType...; 7.RecyclerView三种布局管理添加头的方式: 7.1LinearLayoutManager添加头部 直接分类型就可以 第一个头部是第一种类型 7.2GridLayoutManager添加头部...2 : 1; }); rv.setLayoutManager(manager); rv.setAdapter(new MyAdapter()); //解释:明明头部返回的是2...返回2不应该是2列返回1是1列吗?

    1.4K20

    Android基于DataBinding封装RecyclerView实现快速列表开发

    前言 在移动应用开发中,列表组件是一个非常常见的 UI 组件,绝大多数应用开发中都会使用到列表组件进行界面的开发,在 Android 开发中列表组件一般使用官方提供的 RecyclerView ,而...DataBinding 是 Google 官方的一个数据绑定框架,借助该库,您可以声明式的将应用中的数据源绑定到布局中的界面组件上,实现通过数据驱动界面更新,从而降低布局和逻辑的耦合性,使代码逻辑更加清晰...fun eventDeleteItem(item:String){ data.remove(item) } } 该方法接收了一个 String 类型的 item 数据,实现从列表中移除该...是设置 item 内部事件处理的对象,绑定到布局的 handler 变量。...: Int 这里定义的是一个抽象 get 方法,需要子类去实现返回具体的 item 布局的资源 id。

    3.5K30

    Android 自定义 MarqueeView 实现跑马灯 —— 原理篇

    这篇博客,让我们一起来看一下 MarqueeView 的实现原理。 在上一篇博客中,我们知道我们是通过给 MarqueeView setAdapter 来刷新界面的。...因为同一时刻只有一个 delegate 能处理该 position; 当没有指定 viewType 的时候,我们会以当前 delegates 的容量作为 key 存进 SparseArrayCompat...在 delegates 数组中对应的 key,即我们的 viewType public int getItemViewType(T item, int position) {...mMultiItemTypeAdapter.createItemView(index, convertView, MarqueeView.this); return itemView; } 从代码中可以看出我们是从...实质是用 hanlde 不断发送消息 接受到 APPEAR 消息的时候: 首先获取当前位置的 ItemView,接着执行动画,执行完动画之后,mLastView = mCurView; 。

    1.3K10

    实现一个带有header和footer功能的RecyclerView

    如果是正常的item,直接调用外部adapter的对应方法;如果是header和footer,在对应标识上要减去该header或footer在对应的list中的位置,下面就会解释这样做的原因。...type,同时如果是header或footer还需要知道是哪一个,这就是前面代码中在type中添入位置的原因。...如果是item,直接调用外部adapter的create方法来生成view;如果是header或footer,则根据计算出来的position从list中获取并封装进一个WrapViewHolder。...当我们定义ItemDecoration时就需要注意与position相关的计算,因为一般情况下divider只是给正常的item来使用,header和footer不需要使用(在其布局中已经包含了)。...普通的item,由于需要判断是否是一行的最后一个isEnd(在GridLayoutManager或StaggeredGridLayoutManager中),所以要排除掉header对item位置的影响,

    2.4K20

    关于RecyclerView你知道的不知道的都在这了(上)前言目录正文

    getLayoutPosition():返回的一直是界面上呈现的 Item 的位置信息,即使某个 Item 已经从数据源中被移除。...场景1日志.png 0 position 的 Item 明明已经从数据源中被移除掉了,但由于日志打印的时机是在界面刷新之前,因此可以看到通过 getLayoutPosition() 获取到的是界面上还未刷新之前的...position = 0 的 Item 由于已经从数据源中移除,因此返回 -1,之后的所有 Item 位置自动向前移 1 位。...getAdapterPosition() 的使用场景是,当数据源发生变化,且界面刷新之前,你又需要获取 Item 在数据源中的实际位置时才需要考虑使用该方法。...5.2 addOnScrollListener() RecyclerView 是一个列表控件,自然会涉及到滑动,所以它提供了滑动状态的监听接口,当我们需要在滑动状态变化时相对应的工作时,可以调用该方法注册滑动监听

    3.6K60
    领券