首页 > 编程语言 >十年老司机帮你整理最全Android中需要知道的Java集合框架

十年老司机帮你整理最全Android中需要知道的Java集合框架

时间:2023-06-19 15:05:33浏览次数:34  
标签:顺序 Java 最全 元素 List 查找 集合 Android ArrayList


前言

子曰:温故而知新,可以为师矣。

做android已经有好一段时间了,今天突然看到代码中写的各种用来存储数据的ArrayList、管理Activity的LinkedList、用来Retrofit请求数据时多个参数拼接的HashMap。也许使用已经成为了一种习惯,可是使用他的理由又开始在脑海中慢慢淡化了,故写一篇文章来温故 在我们平时的android开发中,常用的java集合框架。

正文

十年老司机帮你整理最全Android中需要知道的Java集合框架_android开发

这张图已经不陌生了,可是在这么繁琐的java集合框架中,真正在开发中使用的不过也就那几个。所以我们来看下面这张简化图,然后来阐述其中的部分我们常用的:

十年老司机帮你整理最全Android中需要知道的Java集合框架_java_02

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当做栈使用,这个我本人并没有使用过,如果大家有什么见解可以提出来。

下面附一张图:

十年老司机帮你整理最全Android中需要知道的Java集合框架_java_03

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中需要知道的Java集合框架_List_04

文章基本上就到这里,文章只是对android开发过程中常用的一些集合框架做一些个人理解的东西,如有地方不对或者有不同理解的可以提出来。

最后我想说:对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

 


标签:顺序,Java,最全,元素,List,查找,集合,Android,ArrayList
From: https://blog.51cto.com/u_16163453/6513753

相关文章

  • Android-Kotlin-印章类
    上一篇博客介绍了,Android-Kotlin-枚举enum;由于枚举和印章类有相似之处,所以两者对比一下:Kotlin的枚举,重点区分的数据本身Kotlin的印章类,重点区分的是数据类型(类)枚举类的定义:packagecn.kotlin.kotlin_oop09/***定义人的性别枚举类*/enumclassMyEnumPersonSex{......
  • 鹅厂流出两份Android Framework技术宝典火了,完整版 PDF 限时开放下载
    前言最近互联网大厂的”裁员潮“愈演愈烈……如何破局?我想最重要的一点:不断提升个人价值。AndroidFramework的重要性AndroidFramework开发虽然比较偏底层,圈子窄,但是能掌握一些原理的东西,可以触类旁通,往应用层发展也可以,接下来我们看看Framework知识有多重要。举几个栗子,你或许......
  • Android-Kotlin-Activity直接的跳转
    1.选中应用包名packageName,右键:2.选中Kotlin:3.创建Kotlin的Activity完成:第一个Activity,MainActivitypackagecn.kotlinimportandroid.content.Intentimportandroid.support.v7.app.AppCompatActivityimportandroid.os.Bundleimportandroid.util.Logimportandroid.view.......
  • Android-kotlin-空值处理&字符串比较&常量
    空值处理:【案例一:】1.Kotlin对控制处理很严格,默认就不能写null,否则编译都不通过:描述Car汽车对象:packagecn.kotlin.kotlin_base01/***描述Car汽车对象**参数一:车名,参数二:车的价值*/classCar(varcarName:String,varcarMoney:Double){/***得......
  • Android-kotlin学习笔记(一)配置/入门
    1.配置Kotlin开发插件,点击File菜单,选择Settings,选择Plugins,会显示扩展的插件;2.然后选择Browserepositories…,搜索栏目中搜索Kotlin即可,点击Install就行,大小50多M,速度很快的然后安装完成后,重启AndroidStudio3.在项目的build.gradle中配置Kotlin版本:ext.kotlin_version='1.2.......
  • Android-Kotlin-GET/SET 方法的使用
    上篇博客我们讲了kotlin的继承,今天接着往下讲解kotlin的get/set方法的使用。Student.ktpackagecn.kotlin.kotlin_oop04openclassPerson{openvarpersonName:String="我是父类的名字"}classStudent:Person(){/***name用private私有修饰,外界其他地方......
  • 【随笔二】Android-kotlin-实现简单计算器功能
    上一篇博客Android-kotlin-配置/入门配置好了AndroidStudioKotlin的环境;今天做一个简单的demo实战—实现一个简单的计算器功能1.选择包名,然后右键:2.选择Class类型,会有class:3.创建CounterClass:packagecn.kotlin.kotlin_oop02/***加减乘除计算的calss*varnumber1:Double......
  • 基于JAVA驾驶员考试系统
    本论文主要阐述了基于Web技术的网络考试系统的设计与实现。在介绍动态网页程序开发和数据访问技术基础上,提出了网络英语考试系统的组成与结构,阐述了系统的设计方案、实现方法以及所采用的开发工具和相关技术,还重点剖析了前台考试部分的程序设计。系统采用B/S开发模式,以JAVA作为开......
  • Android-kotlin 抽象类与多态的表现
    上篇博文讲了kotlin语言中get/set方法的使用,今天来讲一下kotlin中的抽象类与多态的表现选择包名,然后右键:选择Class类型,会有class:选择File类型,不会自动有class:目录结构:定义描述抽象类Person人类:packagecn.kotlin.kotlin_oop05/***抽象类用abstract修饰*描述:人类的抽象......
  • 鹅厂资深Android开发带你了解面试重点Framework,掌握更加核心的技术
    前言今天,想跟大家聊聊,Framework开发的那些事。系统应用开发,现在来说,已经开始脱离系统,单独拿出来开发,系统定制接口,已提供给应用调用,用来增强功能。原生的桌面,拨号,设置,已经没法做出差异化优势,因此都费尽心机,来进行应用深度开发。对于之前维护系统应用模块的人来讲,修修补补,真的没有什......