每段时间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

欢迎你们关注学习。

阅读全文
0 0
原创粉丝点击