来温故一下Android中需要知道的Java集合框架吧

简介: 前言子曰:温故而知新,可以为师矣。做android已经有好一段时间了,今天突然看到代码中写的各种用来存储数据的ArrayList、管理Activity的LinkedList、用来Retrofit请求数据时多个参数拼接的HashMap。

前言

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

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

正文

img_fcd9464a57141981ea30baf8b2bcf30a.png
image.png

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


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

下面附一张图:


img_68e63530b408c9eb2dfe045ccd082d45.png
image.png

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集合,非同步,基于红黑树实现。 它有两种排序方式:一种是自然排序,一种是定制排序,具体取决于使用的构造方法。 这里不做过多的说明。

补充一张图:


img_d5904838c0b1dbd276e0d2c79ecc990e.png
image.png

文章基本上就到这里,文章只是对android开发过程中常用的一些集合框架做一些个人理解的东西,如有地方不对或者有不同理解的可以提出来,有意向详细了解的可以戳链接:
https://www.cnblogs.com/xiaoxi/p/6089984.html
个人感觉,这个博主总结的还是挺全面的。
也可以去官网了解。

相关文章
|
22天前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
6天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2天前
|
前端开发 Java 数据库
💡Android开发者必看!掌握这5大框架,轻松打造爆款应用不是梦!🏆
在Android开发领域,框架犹如指路明灯,助力开发者加速应用开发并提升品质。本文将介绍五大必备框架:Retrofit简化网络请求,Room优化数据库访问,MVVM架构提高代码可维护性,Dagger 2管理依赖注入,Jetpack Compose革新UI开发。掌握这些框架,助你在竞争激烈的市场中脱颖而出,打造爆款应用。
20 3
|
1天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
10天前
|
编译器 Android开发 开发者
带你了解Android Jetpack库中的依赖注入框架:Hilt
本文介绍了Hilt,这是Google为Android开发的依赖注入框架,基于Dagger构建,旨在简化依赖注入过程。Hilt通过自动化的组件和注解减少了DI的样板代码,提高了应用的可测试性和可维护性。文章详细讲解了Hilt的主要概念、基本用法及原理,帮助开发者更好地理解和应用Hilt。
27 8
|
22天前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
21天前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
28 5
|
19天前
|
Java 数据库连接 Apache
Java进阶-主流框架总结与详解
这些仅仅是 Java 众多框架中的一部分。每个框架都有其特定的用途和优势,了解并熟练运用这些框架,对于每一位 Java 开发者来说都至关重要。同时,选择合适框架的关键在于理解框架的设计哲学、核心功能及其在项目中的应用场景。随着技术的不断进步,这些框架也在不断更新和迭代以适应新的开发者需求。
34 1
|
21天前
|
存储 Java 程序员
Java中的集合框架:从入门到精通
【8月更文挑战第30天】在Java的世界里,集合框架是一块基石,它不仅承载着数据的存储和操作,还体现了面向对象编程的精髓。本篇文章将带你遨游Java集合框架的海洋,从基础概念到高级应用,一步步揭示它的奥秘。你将学会如何选择合适的集合类型,掌握集合的遍历技巧,以及理解集合框架背后的设计哲学。让我们一起探索这个强大工具,解锁数据结构的新视角。
|
22天前
|
设计模式 Java Android开发
探索安卓应用开发:从新手到专家的旅程探索iOS开发中的SwiftUI框架
【8月更文挑战第29天】本文旨在通过一个易于理解的旅程比喻,带领读者深入探讨安卓应用开发的各个方面。我们将从基础概念入手,逐步过渡到高级技术,最后讨论如何维护和推广你的应用。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的代码示例。让我们一起开始这段激动人心的旅程吧!