Java/Android中的数据结构和算法

Android客户端面试基础(五)-数据结构与算法- http://blog.csdn.net/johnWcheung/article/details/72843223

 数据结构:是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。
 算      法:是特定问题求解步骤的描述,算法是独立存在的一种解决问题的方法和思想。算法时间复杂度和空间复杂度;

> 数据结构

ConcurrentHashMap 分段加锁;
> 数据结构
 Android中的各种数据工具,常用集合类的继承结构如下: 注意这里的 Collection、List、Set和Map都是接口(Interface)
 Collection<--List<--Vector ,基于数组结构
 Collection<--List<--ArrayList ,基于数组结构
 Collection<--List<--LinkedList ,基于单链表实现的
 Collection<--Set<--HashSet ,基于单链表和数组结构
 Collection<--Set<--HashSet<--LinkedHashSet ,它继承于HashSet、又基于LinkedHashMap来实现的
 Collection<--Set<--SortedSet<--TreeSet ,内部实现是根据红黑树,红黑树是一种平衡有序的二叉树
 Map<--SortedMap<--TreeMap 
 Map<--HashMap (补充一个HashMap的子类LinkedHashMap:)

1.ArrayList: 元素单个,效率高,多用于查询 ,数据可以重复
2.Vector: 元素单个,线程安全,多用于查询 
3.LinkedList:元素单个,多用于插入和删除 
4.HashMap: 元素成对,元素可为空 ,HashMap的key是不能有重复的
5.HashTable: 元素成对,线程安全,元素不可为空 
6. HashSet:元素单个,元素不可重复

如果能用数组的时候(元素类型固定,数组长度固定),请尽量使用数组来代替List; 
如果没有频繁的删除插入操作,又不用考虑多线程问题,优先选择ArrayList; 
如果在多线程条件下使用,可以考虑Vector; 
如果需要频繁地删除插入,LinkedList就有了用武之地:

 1.View.isShown() 判断视图是否显示,不需要再根据 View.getVisibility() == View.VISIBLE来判断是否显示或者隐藏,但是注意
  (1)View.getVisibility() == View.VISIBLE 只是对View自身的可见性进行判断;
  (2)View.isShown() 只有它及其所有的祖先都为visible时,才返回true。
 2.TextUtils.isEmpty(CharSequence)方法,用于判断字符串是否为null或"",以后再也不要写 if(str != null && !str.equals(""))
 3.TextWatcher **接口,用来监听文本输入框内容的改变
 4.TextView.setError(); 这个一般用于EditText中,验证用户输入,然后给予提示,这样就不需要使用Toast或者Dialog来提示了。
 5.onBackPressed(); 调用此句,相当于点了一次返回按钮。
 6.runOnUiThread可以直接运行到主线程中,一般在子线程中使用
 7.ConcurrentHashMap相较于HashMap,它是线程同步的,而且不是简单的加锁而已,而是采用了分段加锁的技术segment(类似HashTable)来进行加锁,性能比单纯的全局加锁提升10几倍。
 8.SparseArray替代HashMap,SparseArray比HashMap更省内存,它对数据采取了压缩的方式来表示稀疏数组的数据,从而节约内存空间,SparseArray只能存储key为int类型的数据,同时,SparseArray在存储和读取数据时候,使用的是二分查找法
 9.ArrayMap 和 SimpleArrayMap 替代HashMap,其中,ArrayMap 是 Map的子类,而SimpleArrayMap 不是。

> 算法
Android面试算法排序—7大基础算法(详细分析)- http://blog.csdn.net/csdn_aiyang/article/details/73108606
android 常用的算法- http://blog.csdn.net/lespace/article/details/52145598
  算法的学习对于培养一个人的逻辑思维能力是有极大帮助的,它可以培养 我们养成思考分析问题,解决问题的能力。
  一个算法的优劣可以用空间复杂性和时间复杂度来衡量。算法可以使用自然语言、伪代码、流程图等多种不同的方法来描述。计算机系统中的操作系统、语言编译系统、数据库管理系统以及各种各样的计算机应用系统中的软件,都必须使用具体的算法来实现。算法设计与分析是计算机科学与技术的一个核心问题。
  a.关于查找的算法很多种:基本查找、二分查找、二叉树、斐波那契等。

没有更多推荐了,返回首页