Android中一般使用的数据结构有java中的基础数据结构Set, List, Map。还有一些Android中特有的几个,SparseArray(使用Map时Key是int类型的时候可以用这个代替)等。

先上一张数据结构类图,还是比较清晰的。

Collection

它是所有集合类的接口,Set和List也都实现Collection接口,基本需要操作的方法都定义在这里了。

Set

一般使用的有TreeSet和HashSet

1.TreeMap

TreeSet是根据二叉树实现的,也就是TreeMap, 放入数据不能重复且不能为null,可以重写compareTo()方法来确定元素大小,从而进行升序排序。

public class DataType {public static void main(String[] args){Set<Integer> treeSet = new TreeSet<>(new MyComparator());treeSet.add(1);treeSet.add(3);treeSet.add(2);for(Integer i : treeSet){System.out.println(i);}}static class MyComparator implements Comparator<Integer>{@Overridepublic int compare(Integer o1, Integer o2) {if(o1 < o2 ){return -1;}if(o1 == o2 ){return 0;}if(o1 > o2 ){return 1;}return 0;}}
}

以上代码执行结果是:

1
2
3

通过传入MyComparator对象自定义的排序方法,来实现从大到小的排序。

2.HashSet

HashSet是根据hashCode来决定存储位置的,是通过HashMap实现的,所以对象必须实现hashCode()方法,存储的数据无序不能重复,可以存储null,但是只能存一个。

public class DataType {public static void main(String[] args){Set<String> set = new HashSet<>();set.add("1");set.add("2");set.add(null);set.add("1");for(String s : set){System.out.println(s);}}
}

以上代码运行的结果是:

null
1
2

List

List比较常用的有ArrayList和LinkedList,还有一个比较类似的Vector。

1.ArrayList

是使用动态数组来实现的,对于数据的随机get和set或是少量数据的插入或删除,效率会比较高。ArrayList是线程不安全的,在不考虑线程安全的情况下速度也比较快的。ArrayList插入数据可以重复,也是有序的,按照插入的顺序来排序。

public class ListTest {public static void main(String[] args){List<String> arrayList = new ArrayList<>();arrayList.add("1");arrayList.add("1");arrayList.add("2");arrayList.remove("1");for(String s : arrayList){System.out.println(s);}}
}

内部使用动态数组来实现

    /*** Shared empty array instance used for empty instances.*/private static final Object[] EMPTY_ELEMENTDATA = {};public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}

所以根据序号读取数据只需直接获取数组对应脚表的数据就可以了。
2.LinkedList
内部是使用链表的形式来实现的,在插入大量数据的时候效率比较快。
链表实现的代码

private static class Node<E> {E item;Node<E> next;Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}}

往容器最后面添加元素的代码是:

 /*** Pointer to first node.* Invariant: (first == null && last == null) ||*            (first.prev == null && first.item != null)*/transient Node<E> first;/*** Pointer to last node.* Invariant: (first == null && last == null) ||*            (last.next == null && last.item != null)*/transient Node<E> last;void linkLast(E e) {final Node<E> l = last;final Node<E> newNode = new Node<>(l, e, null);last = newNode;if (l == null)first = newNode;elsel.next = newNode;size++;modCount++;}

往容器最前面添加元素的代码

    private void linkFirst(E e) {final Node<E> f = first;final Node<E> newNode = new Node<>(null, e, f);first = newNode;if (f == null)last = newNode;elsef.prev = newNode;size++;modCount++;}

根据序号获取数据:

public E get(int index) {//判断index序号是否是合法的checkElementIndex(index);return node(index).item;}
Node<E> node(int index) {// assert isElementIndex(index);if (index < (size >> 1)) {//判断序号在总长度一半之前还是之后Node<E> x = first;for (int i = 0; i < index; i++)x = x.next;return x;} else {Node<E> x = last;for (int i = size - 1; i > index; i--)x = x.prev;return x;}}

LinkedList根据序号获取数据,是二分进行遍历,如果序号小于总长度的一半,就从链表头部开始往后遍历,直到找到对应的序号。如果序号大于总长度的一半,就从链表尾部往前进行遍历,直到找到对应的序号。拿到数据。

3.Vector

Vector的使用方法和内部实现基本和ArrayList相同,只不过它在add(), remove(), get()等方法中都加了同步。所以它是线程安全的。但是使用效率上就不如ArrayList了。

Map

1.HashMap

Map<String, String> hashMap = new HashMap<>();hashMap.put("1", "a");//存储hashMap.put("2", "b");hashMap.remove("1");//根据key来删除hashMap.get("2");//根据key获取//map的遍历,有很多方法遍历,这里只列举一种。for(Map.Entry<String, String> entry : hashMap.entrySet()){entry.getKey();//获取keyentry.getValue();//获取value}

HashMap也可以说是Map的常用的使用大概就是这些了。
HashMap是基于散列链表来实现的,简单的来说,根据key算出一个hash值,确定一个存放index,但是hash值有可能会冲突重复,所以如果冲突的hash值就需要以链表的形式在同一个index存放了。关于这个,写的好的文章有很多,我就不重读造轮子了。大家看下面的文章就好了, http://blog.csdn.net/u011060103/article/details/51355763

2.TreeMap

TreeMap的使用大致跟HashMap类似,但是内部实现是根据红黑树来实现的。红黑树是一种平衡有序的二叉树,TreeMap的插入删除查询都是依据红黑树的规则来进行的。可以参考:http://blog.csdn.net/chenssy/article/details/26668941

3.Hashtable

先说下,HashMap和TreeMap都是线程不安全的,多线程操作的时候可能会造成数据错误。Hashtable是线程安全的。其他内部实现,与HashMap都是一样的。

Android常用的数据结构相关推荐

  1. Android常用面试题大全

    1.TCP和UDP之间的区别?什么是URL ? TCP被称为用户数据报协议;UDP被称为信息传输控制协议;URL被称为统一资源定位符,通过统一资源定位符可以唯一定位到互联网上的某个资源(图片.视频.音 ...

  2. Android常用面向对象设计模式

    对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是必须的,因为设计模式在Android源码 ...

  3. android开发获取应用本身耗电量_别找了,Android常用自动化工具全在这儿了!

    Android常用自动化工具 ADB - 是Google提供的为Android编写UI测试用例的自动化工具, Android开发/测试人员不可替代的强大工具 uiautomator - 是Google ...

  4. android 获取权限管理,Android常用权限获取和设置

    Android常用权限获取和设置 1 活动管理器 权限 代码 ActivityManager activityManager = (ActivityManager) getSystemService( ...

  5. Android常用的几种资源

    2019独角兽企业重金招聘Python工程师标准>>> Android常用的几种资源 一般资源都是放在res文件夹下的,res文件夹一般包含有values,drawable-ldpi ...

  6. 【算法】常用的数据结构与算法

    学习了王争老师的数据结构与算法之美之后,比较有感触,他把我们常用的数据结构和算法都讲了一遍,而且讲的还不错.整理汇总一下作为笔记. 一.复杂度分析 非常重要.我们必须掌握,基本上要做到,简单代码能很快 ...

  7. 【算法基础】常用的数据结构与算法

    学习了王争老师的数据结构与算法之美之后,比较有感触,他把我们常用的数据结构和算法都讲了一遍,而且讲的还不错.整理汇总一下作为笔记. 一.复杂度分析 非常重要.我们必须掌握,基本上要做到,简单代码能很快 ...

  8. 【算法入门】动态图展示 6 个常用的数据结构,一目了然!

    数据结构的确很枯燥,尤其是初学时候,不知道到底有啥用.不过随着编码年限的增长,我们越会发现它真的很有用,巧妙的数据结构是算法高效实现的助推剂. 今天的文章不会用文字和静态图展现常用的数据结构,因为这种 ...

  9. android控件常用的属性,android?常用的控件属性

    1.Android RelativeLayout 属性 // 相对于给定ID控件 android:layout_above 将该控件的底部置于给定ID的控件之上; android:layout_bel ...

最新文章

  1. 暴雪战斗公式——除法公式的精髓
  2. 【转】TCP的SEQ和ACK的生成
  3. WINCE config.bib文件中的FSRAMPERCENT的意义
  4. 查看操作系统版本linux_查看电脑操作系统版本(适用于Mac OS)
  5. fundamental-react在POC中的一个应用
  6. linux的apache安装在哪个目录,在linux系统下apache的默认安装路径在哪
  7. Python 读取json文件
  8. ​编译安装subversion-1.8.5整合apache
  9. QT实现完整TIM登录框界面样式
  10. java只有值传递_为什么说java中只有值传递
  11. 回归分析什么时候取对数_技术派|SPSS数据分析心得小结及心得分享!必备收藏...
  12. 如何修改Proteus的Licence
  13. php存储富文本编辑器内容到数据库
  14. python关联规则挖掘_通过Python中的Apriori算法进行关联规则挖掘
  15. 2020年10款网盘大比拼,总有一款适合你
  16. 分享图片或链接到抖音
  17. linux lsof详解
  18. 僵尸国度.Z.Nation
  19. csgo跳投指令_CSGO控制台进阶指令
  20. Linux学习笔记(一)

热门文章

  1. 华为海思 hikey970 烧录固件 ubuntu桌面版
  2. Hive(6):数据定义语言(DDL)案例
  3. AdaDepth: Unsupervised Content Congruent Adaptation for Depth Estimation
  4. Ubuntu20.04台式机网线连接Win10笔记本上网(亲测)
  5. 积极重返中国的谷歌,这次瞄准了AI入口
  6. 大牛总结 Elastic Search 概述(一)
  7. IMSI、TMSI和P-TMSI
  8. 数智赋能,新华三打造郑州“智美新城”
  9. fcpx视频剪辑软件中文版
  10. 为什么说消费主义害死人