每段时间Android开发10个知道(中级系列)-20170831
来源:互联网 发布:sql server注释快捷键 编辑:程序博客网 时间:2024/06/06 02:03
1.理解Window和WindowManager
http://blog.csdn.net/yhaolpz/article/details/68936932?locationNum=2&fps=1
2.四大组件的工作过程
http://blog.csdn.net/u013132758/article/details/51375919
3.Android中图片的三级缓存
http://blog.csdn.net/Army_Jun/article/details/53425147
4.了解Android的蓝牙开发
http://blog.csdn.net/Charon1997/article/details/72895734?locationNum=2&fps=1
5.Android性能优化
http://blog.csdn.net/xiaohanluo/article/details/76546209?locationNum=2&fps=1
网上有许多类似的博客,性能优化非常重要,因为在一个产品已经设计好的前提下,除了去添加新的功能,还需要对已有的某些模块功能进行优化,这才能让开发出来的产品更加优秀。
http://www.jianshu.com/p/b3b09fa29f65?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
6.Android感应器开发基础理解
http://blog.csdn.net/mad1989/article/details/20848181
7.Android手势开发
http://blog.csdn.net/ada_dengpan/article/details/51108725
8.理解泛型,掌握泛型设计
看完以下5篇文章,相信你应该可以掌握了,前提是你之前对泛型有些许理解
(1)http://blog.csdn.net/clandellen/article/details/77219824
(2)http://blog.csdn.net/clandellen/article/details/77285616
(3)http://blog.csdn.net/clandellen/article/details/77351555
(4)http://blog.csdn.net/clandellen/article/details/77394687
(5)http://blog.csdn.net/clandellen/article/details/77426816
9.封装一个类模拟LinkedList类,具有基本的增删改查,还有迭代器
代码如下,一般牛的公司都基本上都会问,考验你对数据结构的掌握情况,所以一定要平时多多学习一下数据结构,然后就可以像笔者一样轻松写出模拟Java集合某些类的代码了。
public class LinkedListCopy<E> { private Node<E> head = new Node<>(null);//整个单链表的头部 private int size =0;//单链表的长度 //结点类 private static class Node<E>{ public Node head = null;//结点的头部 public Node tail = null;//结点的尾部 E value;//结点中存放的值 public Node(E e){value = e;} } //迭代器类 private static class DieDaiQi<E>{ private LinkedListCopy<E> linkedListCopy;//模拟被迭代的LikedList private Node<E> dangQian ;//存放处于焦点的结点 public DieDaiQi(LinkedListCopy<E> linkedListCopy){ this.linkedListCopy = linkedListCopy; dangQian = linkedListCopy.head;//当你生成迭代器的时候,焦点开始在整个单链表的头部 } //将当前的焦点移动一格 public boolean moveToNext(){ boolean falg = (dangQian.tail != null); dangQian = dangQian.tail; return falg; } //获取当前焦点对应的结点的值 public E next() { E e = dangQian.value; return e; } //重置迭代器 public void reSet(){ dangQian = linkedListCopy.head; } } public LinkedListCopy(){ } //获取当前单链表的迭代器 public DieDaiQi dieDaiQi(){ return new DieDaiQi(this); } //尾部添加元素 public void add(E e){ Node<E> dangQian = this.head.tail; //存放焦点对应的结点 Node<E> ago = head; //存放当前焦点前一个的结点 while(true) { if(dangQian!=null){ //没有移动到尾部,将焦点移动一格 ago = dangQian; dangQian = dangQian.tail; }else { //当移动道尾部的时候,就可以添加元素 dangQian = new Node<E>(e); if(ago.tail == null){ ago.tail = dangQian; dangQian.head = ago; } break; } } size++;//添加元素,长度加1 } //在指定位置插入元素 public void add(int i,E e){ if(i<0||i>=size()){ System.out.println("越界异常!"); return; } if( i == this.size()){this.add(e);return;}//尾部插入 //插入添加 Node<E> node = new Node<>(e); Node<E> dangQian = this.head.tail;//存放焦点对应的结点 Node<E> ago = this.head;//存放当前焦点前一个的结点 int j = 0; while(dangQian != null) { if(i == j){ node.head = ago; node.tail = dangQian; dangQian.head = node; ago.tail = node; break; }else{ j++; ago = dangQian; dangQian = dangQian.tail; } } size++;//添加元素,长度加1 } //删除元素 public void delete(int i){ if(i<0||i>=size()){ System.out.println("越界异常!"); return; } Node<E> dangQian = this.head.tail; Node<E> ago = head; int j=0; while(dangQian != null){ if(j == i){ ago.tail = dangQian.tail; dangQian.tail.head = ago; break; }else{ j++; ago = dangQian; dangQian = dangQian.tail; } } size--;//删除元素长度减一 } //修改元素 public void gaiValue(int i,E e){ if(i<0||i>size()){ System.out.println("越界异常!"); return; } Node<E> dangQian = this.head.tail; Node<E> ago = null; int j=0; while(dangQian != null){ if(j == i){ dangQian.value = e; break; }else{ j++; ago = dangQian; dangQian = dangQian.tail; } } } //查询元素 public int serach(E e){ Node<E> dangQian = this.head.tail; int j=0; while(dangQian != null){ if(dangQian.value.equals(e)){ return j; }else{ j++; dangQian = dangQian.tail; } } return -1; } //获取当前单链表的长度 public int size(){ return size; } //尾部添加另外一个单链表 public void addAll(LinkedListCopy<E> linkedListCopy){ Node<E> dangQian = linkedListCopy.head.tail; while(dangQian != null){ this.add(dangQian.value); dangQian = dangQian.tail; } } //获取集合指定位置的元素值 public E get(int i){ if(i<0||i>=size()){ System.out.println("越界异常"); return null; } Node<E> dangQian = this.head.tail; int j=0; while(dangQian!=null){ if(j == i){ return dangQian.value; }else{ j++;dangQian =dangQian.tail; } } return null; } //还有其它的功能可以模拟,代码较多,笔者就不写了,理解上面的迭代器原理,什么都可以模拟的出来 public static void main(String[] args){ LinkedListCopy<String> linkedListCopy = new LinkedListCopy<String>(); DieDaiQi<String> dieDaiQi = linkedListCopy.dieDaiQi();//获取迭代器 //尾部增加 linkedListCopy.add("ss1"); linkedListCopy.add("ss2"); linkedListCopy.add("ss3"); linkedListCopy.add("ss4"); System.out.println("1*****尾部添加操作*****"); System.out.println("尾部添加操作后集合所有元素如下:"); while (dieDaiQi.moveToNext()){ System.out.println(dieDaiQi.next()); } System.out.println("此时集合元素个数:"+linkedListCopy.size()); System.out.println("1*****尾部添加操作*****\n"); //插入添加 linkedListCopy.add(0,"ss"); linkedListCopy.add(3,"ss2.5"); dieDaiQi.reSet();//重置迭代器 System.out.println("2*****插入添加操作*****"); System.out.println("插入添加操作后集合所有元素如下:"); while (dieDaiQi.moveToNext()){ System.out.println(dieDaiQi.next()); } System.out.println("此时集合元素个数:"+linkedListCopy.size()); System.out.println("2*****插入添加操作*****\n"); //删除 linkedListCopy.delete(3); dieDaiQi.reSet();//重置迭代器 System.out.println("3*****删除操作*****"); System.out.println("删除操作后集合所有元素如下:"); while (dieDaiQi.moveToNext()){ System.out.println(dieDaiQi.next()); } System.out.println("此时集合元素个数:"+linkedListCopy.size()); System.out.println("3*****删除操作*****\n"); //修改 linkedListCopy.gaiValue(0,"ss0"); dieDaiQi.reSet();//重置迭代器 System.out.println("4*****修改操作*****"); System.out.println("修改操作后集合所有元素如下:"); while (dieDaiQi.moveToNext()){ System.out.println(dieDaiQi.next()); } System.out.println("此时集合元素个数:"+linkedListCopy.size()); System.out.println("4*****修改操作*****\n"); //查询操作 int serachInt = linkedListCopy.serach("ss8"); if(serachInt==-1) { System.out.println("集合中不存在该元素!"); }else{ System.out.println("ss3存在的位置是:第" + (serachInt + 1) + "个"); } System.out.println(linkedListCopy.get(serachInt)); }}
10.从此篇文章之后,8,9,10不再是Java,改成Kotlin,想继续学习Java有意思的题目,关注“有趣的Java”系列文章
因为Android现在的官方开发语言是Kotlin,所以我也应变一下,之后的“每段时间Android开发10个知道”系列文章的8,9,10将改成Kotlin,当然如果你想继续学习Java,其实Java和Kotlin的联系还是挺大的,所以笔者认为继续学习Java还是很有必要的,也就是把Java和Kotlin都学好,对Android开发更加有好处。
Kotlin学习请看笔者Kotlin系统化学习系列文章(有新的文章将会同步更新到此博客):
Kotlin系统化学习系列文章(所有文章的链接):http://blog.csdn.net/clandellen/article/details/77466628
有趣的Java系列文章:
http://blog.csdn.net/clandellen/article/details/77719620
欢迎你们关注学习。
- 每段时间Android开发10个知道(中级系列)-20170831
- 每段时间Android开发10个知道(中级系列)-170725
- 每段时间Android开发10个知道(中级系列)-170808
- 每段时间Android开发10个知道(中级系列)-170815
- 每段时间Android开发10个知道(基础系列)-170523
- 每段时间Android开发10个知道(基础系列)-170524
- 每段时间Android开发10个知道(基础系列)-170525
- 每段时间Android开发10个知道(基础系列)-170526
- 每段时间Android开发10个知道(基础系列)-170527
- 每段时间Android开发10个知道(基础系列)-170602
- 每段时间Android开发10个知道(初级系列)-170606
- 每段时间Android开发10个知道(初级系列)-170609
- 每段时间Android开发10个知道(初级系列)-170611
- 每段时间Android开发10个知道(初级系列)-170613
- 每段时间Android开发10个知道(初级系列)-170616
- 每段时间Android开发10个知道(初级系列)-170619
- 每段时间Android开发10个知道(初级系列)-170622
- 每段时间Android开发10个知道(初级系列)-170627
- 应用含有广告标识符-上架解决
- js的一道经典题目
- 将博客搬至CSDN
- 收获,不止SQL优化——抓住SQL的本质--第五章
- spring整合mybatis完整案例(注解配置方法)
- 每段时间Android开发10个知道(中级系列)-20170831
- centos6.4安装及升级gcc 4.8.2
- Spring_Bean内类型赋值
- JS/Jquery常用代码
- 从输入url到页面返回的全过程
- 获取微信公众号的用户信息( ThinkphpP 5.0 )
- 你的工资是老板发的吗?
- iOS 通过加载KML资源文件在地图上绘制
- 【WEB】JS中innerHTML、outerHTML、innerText 、outerText、value的区别与联系?jQuery中的text()、html()和val() ?