-
数据结构与算法学习-双向链表
双向链表在上一篇单链表中已经提到了双向链表,其实单链表实现时候,双向链表相对容易多了,只不过对每个节点多了一个前驱节点链接,遍历可以前向遍历,也可以后向遍历。在添加节点和删除节点时,需要注意,因为需要维护节点和前驱链和后继链,所以在添加时,先完成新节点的前向链和后向链,然后再修改新节点的前驱节点的后向链和后继节点的前驱链,分清顺序;同样,删除节点,顺序相反,先完成前驱节点和后继节点的链接,然后再修改要删除的节点的前驱链和后继链。代码实现public class DLinkedList<...…
-
2018-总结
有点拖延症了,2018的总结才开始写。上次总结是在9月份,那次也是转行到互联网公司刚好半年时间,其实那个时间点,也是比较特殊的一个时间,回头看下,有些感悟写的很散。当时也是因为来到这家公司时招我进来的 Leader 离职了。当时想的也有点多,也是有点无奈吧!作为一个团队的 Leader,最好的状态就是能够为团队争取更多的资源,让整个团队不断成长,同时还能创造更好的业绩,这是理想的状态,现实总是残酷的;再有一种状态就是能够和团队成员一起离职,东山再起。做到哪一种我认为都很厉害了!这样的 Le...…
-
数据结构与算法学习-单链表
一、什么是链表?1.和数组一样,链表也是一种线性表。2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。二、为什么使用链表1.插入、删除数据效率高O(1)级别(只需更改指针指向即可),随机访问效率低O(n)级别(需要从链头至链尾进行遍历)。2.和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储后继...…
-
数据结构与算法学习-数组练习
上一篇 数据结构与算法学习-数组 简单实现了一下 ArrayList,对 List 的增删改查有了一定的认识,这一部分,来练习一下一些简单小算法,可以使用我们自己实现的 ArrayList,顺便检查下哪里写的不好。下面就直接给出算法,具体的逻辑不讲解,都是相对比较基础的算法题,花一点时间相信大家能够看得懂!public class RArrayListUtil {/*** 给定一个整形数组a , 对该数组的值进行置换* 例如: a = [7, 9 , 30, 3] , 置换后为 [3...…
-
数据结构与算法学习-数组
1. 概念学习数据结构一般都是从数组开始,以为相对来说简单,而且也最常用。数组是我们在编程中最常用的数据结构,它是线性的数据结构,即在内存中是连续的,所以可以很方便的进行遍历,只要有首地址,就可以根据角标计算出所要拿到的元素的地址:arr[i] = arr[0] + K * i;K是一个元素所占的字节数,例如在java中,一个 int 元素占有 4 个字节;实际上,学到 c 语言的知道,数组也是指针,意思是数组元素的首地址对应于指针。在java中虽然没有指针,但是使用的引用,底层应该也是指...…
-
数据结构与算法学习-复杂度分析
本篇主要记录一下在学习数据结构与算法的过程中,关于复杂度的一些理论部分,了解这些概念和方法后,主要就是通过大 O 法来得到复杂度,对算法有一个很好的评估!一、什么是复杂度分析?1.数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”。2.因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。3.分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。4.复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。二、为什么要进行复杂度分析?1.和性能测试...…
-
数据结构与算法学习-队列
1.简介队列(Queue),是一种先进先出的数据结构,First In First Out(FIFO),可以想象一下,就像是在排队买票,后来的人只能排在对尾,先来的人可以先买票(在对头,可以执行出去的操作)。队列支持两个操作:入队enqueue(),放一个数据到队尾;出队dequeue(),从队头取一个元素。所以,和栈一样,队列也是一种操作受限的线性表,但是队列比栈多出来一个操作端,可以吧队列想象成一个水管,一头进水,一头出水;栈可以想象成一个瓶子,进出都是一个口,这就是它们最直观的区别。...…
-
数据结构与算法学习-栈
1. 栈的特性栈这个数据结构相对简单,它是一种“先进后出”(First In Last Out,FILO)的数据结构,即操作数据的进出只能在一端进行,所以从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。栈的实现可以用数组来实现,此时属于顺序栈,同时可以增加动态扩容的属性。如果使用链表实现,此时是链式栈,无需要进行扩容,因为链表不需要设置容量,只要内存...…
-
自定义 View - 基础
先扯一点题外话,就现在的 Android 市场来说,可以说是不容乐观的,只不过是相对的,Android 的坑位有限,人又相对比较多,加上资本寒冬,像我一样的菜鸟是最为令人担忧的。那么能怎么办呢?只有进阶到高级才行,才能混的下去,高级 Android 工程师的市场还是很广阔的,所以一起努力吧,少年们!想进阶到高级,自定义 View 这部分是必须要攻克的,这篇也算是开篇,主要翻译一下官方文档,在补一下基础部分,像坐标系,位置获取方式,颜色使用方式等,下面就动起来吧!1. View 简介1.1 ...…
-
My转行6个月感悟
工作很久没有写个人总结了,有一些客观因素在,每天确实很忙,互联网小公司加班是家常便饭,基本上都是 996 的状态,但主要还是在于自身吧。虽然每天都很忙,总会抽出一定时间的。忙归忙,当时总是需要时间总结的,而且也越来越意识到总结的重要性。大概在今年3月底来到一家小公司,也算是年初时打算从传统的行业出来,做一些不一样的东西,感受下互联网公司的氛围。一是由于在传统行业里面,接触到的东西有限,学到的东西也很有限;二是自己还不太想这么早就过上安逸的生活,还不到安逸的年纪;再有就是想做一些感兴趣的东西...…
-
Drawable
1. Drawable 简介Drawable 在 Android 开发中是非常常用的,比如在 XML 中定义color,shape,selector 等。通过 Drawable 的使用,能够帮助我们实现一些比较好的界面效果,同时 Drawable 又相对轻量级,不像自定义 View 那样复杂。使用 Drawable 代替一些图片时,可以有效减少 APK 包的大小,开发成本也行对比较低。 A Drawable is a general abstraction for “something ...…
-
RecyclerView-2
上一篇 介绍了 RecyclerView 的基本使用,这篇主要整理下在使用过程中记录的一些小细节,不是很重要的一些知识点,但是这些小细节,如果遇到的话,也是需要上网查资料的,也会有时间成本,所以还是记录下来,以防以后再遇到。1. 分割线上一篇中已经介绍了分割线,但是悉心的童鞋发现分割线,在 LinearLayoutManager 中使用是正常的,但是在 StaggeredGridLayoutManager 和 GridLayoutManager 中使用是有问题的,在 GridLayoutM...…
-
RecyclerView-1
一、RecyclerView 介绍在 RecyclerView 出来之前,大家都在使用 ListView、GridView,当然 RecyclerView 出来之后,基本上都转向了 RecyclerView,从名字上可以看出,它能够实现view 的复用,同样 ListView 在使用时我们自己也可以通过 converView 来实现复用,但是 RecyclerView 已经帮我们做好了,我们只需要给出需要装载 view 的 ViewHolder 就行,同时允许我们添加 ItemDecora...…
-
greenDAO-2
前言上一篇 对 greenDAO 进行了基本的介绍,包括配置、注解含义、基本的操作。本篇主要对 greenDAO 的增删改查的一些高级用法进行介绍,有时可能业务需求,简单的增删改查可能满足不了,比如数据较大、多表联查,这时就需要学一下 greenDAO 的高级用法。本篇主要内容,就在这个粗略的草图中。1. 建表对于移动端来说,数据库不会很复杂,毕竟空间和处理能力有限,基本上用到的是一些单独的一张表,或者一对一,一对多这样的表。那我们就来试一下一对多的表。两张表,一张里面存储班级信息,另一张...…
-
Retrofit-3
Retrofit 是目前作为网络请求的主流框架,使用起来很方便,仅需在接口中定义方法,打上注解,而且和 Rxjava 配合起来,可以更好的完成网络请求时的线程切换问题。那么这样一个框架,我们有必要对它的源码分析一下,希望能够从中吸取到一定的东西,Retrofit 框架里面用到了很设多计模式,像外观模式,代理模式,工厂模式,适配器模式,装饰者模式等等,这无疑是学习设计模式很好的一个实例。如果对 Retrofit 的使用还不是很熟练的话,可以看看我之前写的两篇文章:Retrofit2.0 学习...…
-
greenDAO
前言一般文章中介绍数据存储有这么几种: 文件 SharedPreferences 数据库 网络 ContentProvider 其实,在内存存储也可以算是一种存储,比如,有些时候我们用 static 变量存储一些共享数据,只不过与上面的数据不用,上面的是持久化数据存储,但是也是一种数据存储方式,需要根据需求来决定使用哪种方式。加上内存存储构成三级缓存策略,...…
-
BLE
介绍1.BLE 是 Bluetooth Low Energy 的缩写,意思为低功耗蓝牙。由蓝牙技术联盟(Bluetooth SIG)设计的无线通讯技术,主要用于医疗,健身,安全和家庭娱乐行业。 与传统蓝牙相比,蓝牙低功耗旨在大幅降低功耗和成本,同时也能够达到相同的通讯效果。支持多个平台,包括 IOS,Android,Windows Phone 和 BlackBerry 以及 macOS,Linux,Windows 8 和 Windows 10 在内的移动操作系统本身支持蓝牙低功耗。 蓝牙 ...…
-
Retrofit-2
前言Retrofit是当下比较热门的一个网络框架,相信很多公司都在使用,即使你没使用过这个框架,也应该听过MVP+Retrofit+Rxjava 或者 Retrofit+Rxjava+Okhttp+MVP 这样的组合。本篇只是一篇对Retrofit的入门介绍及简单使用,后面再逐步框架上过渡,慢慢来!1 简介Retrofit 官方地址如果没有一些基础,像我一样,直接看官方文档,估计也会看的一头雾水,因为文档很简洁,上来就直接给出使用的方法。需要的一些基础知识还得自己去补,上一篇关于 Retr...…
-
Retrofit-1
一、Http简介要想熟悉框架的使用,需要对一些基本的概念做一下了解,否则,有些地方理解的不好可能不好灵活的使用,主要涉及到了注解(Annotation),HTTP协议,OkHttp,RESTful Api等,不可能一下子都能掌握,至少碰到某一部分,需要先做一下了解。当然,学过的同学可以略过,本人是非计算机专业的,所以需要补的东西很多哈。本篇文章主要是为学习Retrofit进行一下知识储备,对Http部分以及RESTful Api进行简单总结,这样后面在使用Retrofit处理接口参数时能理...…
-
Annotation
在android中有很多开源框架,比如Retrofit,Butter Knife,ActiveAndroid等都有些自己定义的注解,实用到了Annotion,中文译为“注解”,所以很有必要学习下注解,要不框架源码很不容易看懂,另外,因为注解中用到了反射,所以可以对反射不熟悉的同学先去了解下反射的基本用法。1. 什么是Annotation?官方说法: An annotation is a form of metadata, that can be added to Java source ...…