来温故一下Android中需要知道的Java集合框架吧
前言
子曰:温故而知新,可以为师矣。
做android已经有好一段时间了,今天突然看到代码中写的各种用来存储数据的ArrayList、管理Activity的LinkedList、用来Retrofit请求数据时多个参数拼接的HashMap。也许使用已经成为了一种习惯,可是使用他的理由又开始在脑海中慢慢淡化了,故写一篇文章来温故 在我们平时的android开发中,常用的java集合框架。
正文
这张图已经不陌生了,可是在这么繁琐的java集合框架中,真正在开发中使用的不过也就那几个。所以我们来看下面这张简化图,然后来阐述其中的部分我们常用的:
1、所有的集合都在 java.util 包下,java的集合几乎是从Collection 和 map这两个接口中派生出来的,而这两个接口又有一些子类(包括子接口和实现类)
2、List 继承于 Collection,允许元素重复,而且会维护元素顺序;访问时可以通过索引去访问。
3、Set 也继承于 Collection,保证了元素的唯一性,反之不保证元素的顺序;访问他当中的元素时,只能通过元素本身去访问。
4、Map 是一个存储键值对的,也就是说你存东西要有钥匙和箱子,你要找到这个箱子就必须有钥匙,就是所谓的 Key - Value;它与Collection没有任何关系
5、Iterator 我们叫他迭代器,一般用来遍历集合中的元素
下面我们再来细说一下List、Set、Map中的子类
List
上面我们已经说了,List是一个有序的集合。
List中包括一下几个部分:
ArrayList
ArrayList应该是我们在android开发中最最最常用的一个集合了,每一个ArrayList都会有一个初始化容量(10),每次我们add元素的时候,它都会对它的容量进行检测,如果控件不足就会自动对其进行扩容。
它是数组结构,并且它拥有几个特点: 查找速度快,线程不安全,增删比较慢。
所有的特点都是相对而言,因为它的查找速度快,我们在列表中的点击事件等都会需要查找集合中的某个元素,然后对其进行操作,这样我们就可以很快的相应点击事件。
LinkedList
LinkedList与ArrayList不同,它的实现方式是双向链表,每次查找元素时都要遍历一次,所以它的查找速度就劣于ArrayList。但是由于这个原因它的插入和删除都要快一些,
那么它的特点是:查找速度慢,线程安全,增删比较快。
Vector
Vector的实现和操作几乎和ArrayList是一样的,唯一一点不同就是 Vector的线程是安全的,所以它的性能没有ArrayList好;这样一来,我们就可以根据其不同的特点去做不同的事情。
Stack
Stack继承自Vector,实现一个后进先出的堆栈。它提供了几个额外的方法,使得Vector当做栈使用,这个我本人并没有使用过,如果大家有什么见解可以提出来。
下面附一张图:
Set
包含以下几个:
HashSet
HashSet 是一个没有重复元素的集合。它是由HashMap实现的,不保证元素的顺序(这里所说的没有顺序是指:元素插入的顺序与输出的顺序不一致),而且HashSet允许使用null。但是只允许有一个null元素!
LinkedHashSet
LinkedHashSet继承自HashSet,其底层是基于LinkedHashMap来实现的,有序,非同步。(LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。)
TreeSet
TreeSet是一个有序集合,其底层是基于TreeMap实现的,非线程安全。TreeSet可以确保集合元素处于排序状态。
Map
HashMap
以哈希表数据结构实现,查找对象时通过哈希函数计算其位置,它是为快速查询而设计的。也是我们最常用的一个Map集合
LinkedHashMap
它继承于 HashMap,它保留了输入顺序,所以,如果你要求顺序就使用它
。
TreeMap
TreeMap 是一个有序的key-value集合,非同步,基于红黑树实现。 它有两种排序方式:一种是自然排序,一种是定制排序,具体取决于使用的构造方法。 这里不做过多的说明。
补充一张图:
文章基本上就到这里,文章只是对android开发过程中常用的一些集合框架做一些个人理解的东西,如有地方不对或者有不同理解的可以提出来,有意向详细了解的可以戳链接:
https://www.cnblogs.com/xiaoxi/p/6089984.html
个人感觉,这个博主总结的还是挺全面的。
也可以去官网了解。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java高阶编程——RxBus 开源,基于 RxJava 的 event bus
介绍 RxBus 是一个发布/订阅模式的事件总线,用法和 EventBus 一样简单。RxBus 基于 RxJava 开发,除了拥有和 EventBus 一样简单的事件总线机制之外,还拥有 RxJava 的丰富特性。 如何使用 定义 EventData: public static class EventData { /* Additional fields if needed */ } 注解定义订阅者的回调方法,回调方法回在 UI 线程中执行: @RegisterBus public void onMessageEvent(MessageEvent event) {/* Do something */}; 注册/解注册。 观察者需要被注册到 RxBus,其 @RegisterBus 标记的方法才会被扫描到,在不需要的地方记得解注册。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act...
- 下一篇
报名|支付宝小程序挑战赛,云栖大会ATEC开发者乐园等你来战
小蚂蚁说: 9月19-22日,蚂蚁金服将在云栖大会暨蚂蚁ATEC科技大会期间打造蚂蚁开发者乐园板块,其中包含蚂蚁金融科技云+端一站式体验以及支付宝小程序挑战赛两大环节,欢迎广大开发者们报名参与。 前言 8 月 14 日,云栖大会组委会正式宣布,2018年的云栖大会将于9 月19-22 日在杭州云栖小镇举办,会议主题为 “驱动数字中国”。届时将有主论坛、前沿峰会、分论坛、蚂蚁金服ATEC 科技大会、生态科技展、云栖虾米音乐节、云栖智能运动会等活动。 去年,蚂蚁金服举办了第一届ATEC开发者大赛,该比赛以“金融科技,未来生活”为主题,依托支付宝小程序为开发基础,鼓励开发者通过支付宝小程序充分结合蚂蚁金服提供的各项能力,包括移动支付、担保交易、芝麻信用、花呗、保险等金融服务,为几亿用户提供改善日常金融生活的应用体验。 今年,蚂蚁金服将继续以“金
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS关闭SELinux安全模块
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 设置Eclipse缩进为4个空格,增强代码规范
- Windows10,CentOS7,CentOS8安装Nodejs环境