Android每周一个学习计划——Java容器的学习使用

news/2024/7/8 12:59:21 标签: java, 移动开发, 面试

序言:这篇文章本来早就应该写了,这个知识点也是日常开发中经常用到的,而且面试过程中也被每每提及,所以通过这次一周一个知识点的机会,打算好好总结一下容器相关的知识。

1、何为容器?

在Java中,有一个类专门用来存放其他类的对象,这个类就是容器,又称之为集合,集合就是将若干性质相同或相近的类对象组合在一起而形成的一个整体。

2、我们都知道,存放数据还有一个叫数组的东西,那容器与数组的关系和区别又是什么呢?

首先,数组有固定的长度,而且长度很难扩充,容器就不一样了,容器的长度是不固定的,你想要多少就能给你多少;其次数组中所存放的都是同一类型的数据,而容器不同,容器可以存放不同的数据类型;再其次,容器不能通过下标的方式访问容器中的元素,数组的所有功能都能通过容器实现,只是方式不同;最后,如果想要将容器当成数组来用,可以使用容器中的toArrayList来将容器转成数组。

3、Collection接口:Collection是最基本的集合接口,一个Collection代表一组Object对象,JDK中提供的类都是继承自Collection的字接口List和Set。在Java中,有四个历史集合类和六个集合实现,之所以称之为历史集合类是因为从Java1.0版本开始就一直沿用至今。具体如下表所示:

接口实现历史集合类
SetHashSet
HashSet
ListArrayListVector
LinkedListStack
MapHashMapHashtable
TreeMapProperties

Collection中有很多基本的方法,增删改查等,下面我们就一一来看看:

返回值方法名称功能介绍
booleanadd(Object o)向集合中添加一个元素。
booleanaddAll(Collection<? extends E> c)将指定 collection 中的所有元素都添加到此 collection 中。
voidclear()移除此 collection 中的所有元素。
booleancontains(Object o)如果此 collection 包含指定的元素,则返回 true,否则返回false。
booleancontainsAll(Collection<?> c)如果此 collection 包含指定的元素,则返回 true,否则返回false。
booleanequals(Object o)比较此 collection 与指定对象是否相等
inthasCode()返回此 collection 的哈希码值。
booleanisEmpty()如果此 collection 不包含元素,则返回 true,否则返回false。
Iteratoriterator()返回在此 collection 的元素上进行迭代的迭代器。
booleanremove(Object o)从此 collection 中移除指定元素的单个实例,如果存在的话。
booleanremoveAll(Collection<?> c)移除此 collection 中那些也包含在指定 collection 中的所有元素。
booleanretainAll(Collection<?> c)仅保留此 collection 中那些也包含在指定 collection 的元素。
intsize()返回此 collection 中的元素数。
Object[]toArray()返回包含此 collection 中所有元素的数组。
T[]toArray(T[] a)返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

4、Java容器中一般有三大类,Set集,List列表,Map映射,以下列举一些常用的容器及其用法:

(1)、Set:Set接口继承了Collection,它的内部实现是基于Map,Set的特点就是不允许出现重复的元素,换句话说,就是它会默认去重,它里面的元素是无序的,它只允许包含一个null的元素(因为内部去重的操作)。你可以通过Set去增加或者删除元素,但是添加的元素必须定义equals方法以确保对象的唯一性,遍历Set集合时,只能使用foreach遍历和迭代器Iterator遍历。以下列举一些常用的Set操作方法:

方法名称功能介绍
add(T data)向集合中添加一个元素
addAll(Collection c)向集合中添加一个集合
remove(T data)在集合中清除对象data
removeAll(Collection c)在集合中清除与集合c的交集
toArray(Set set)在集合中清除与集合c的交集
iterator()获取Set的迭代器(用于遍历操作)

(2)、HashSet:为了快速查找而设计的Set。存入HashSet的对象必须定义hasCode方法以确保对象的唯一性。使用HashSet能够最快的获取集合中的元素,效率非常高(以空间换时间)。会根据hashcode和equals方法来判断是否是同一个对象,如果hashCode一样,并且equals返回true,则是同一个对象,不能重复存放。

(3)、TreeSet:TreeSet具有Set的特点,而且它会自动将元素排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。排序规则分别是自然排序和客户排序:

(i)、自然排序:TreeSet要添加哪个对象就在哪个对象上面实现java.lang.Comparable
	接口,并重写comparaTo()方法,该方法返回0则表示是同一个对象,否则为不同对象。
	
(ii)、客户排序:建立第三个类并实现java.lang.Comparable接口,并重写方法。
	定义集合TreeSet ts=new TreeSet(new 第三个类())。
复制代码

(4)、LinkedHashSet:具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

(5)、List:List接口继承了Collection,List的特点是有序的(元素怎么存的,就怎么取出来),而且元素可以重复,和Set不同的是List的元素中可以包含多个null值。你可以在List的任意位置插入与移除元素(前提是得要有元素)。以下列举一些常用的List操作:

方法名称功能介绍
add(T data)用来向集合的末尾添加一个对象
add(int index, T data)用来向集合的指定位置添加一个对象,其他对象的索引位置相对后移一位
addAll(Collection<? extends T>)用来向集合的末尾添加指定集合的全部对象
addAll(int index,Collection<? extends T>)用来向集合的指定位置添加指定集合的全部对象
remove(T data)用来清除集合中指定位置的对象
removeAll(Collection<? extends T>)用来清除集合中指定集合的全部对象
set(int index, T data)用来将集合中指定位置的对象修改为指定对象
get(int index)用来获取集合中制定位置的对象
indexOf(T data)用来获得指定对象的位置,当存在多个时,返回第一个对象的位置,当不存在时,返回-1
listIterator(int index)用来获得一个包含所有对象的ListIterator型实例

每周一个学习计划,未完待续......


http://www.niftyadmin.cn/n/710096.html

相关文章

git for windows

git for windows https://git-for-windows.github.io/posted on 2016-01-05 18:15 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/ruiy/p/5103379.html

[Hdu3652]B-number(数位DP)

Description 题目大意&#xff1a;求小于n是13的倍数且含有13的数的个数。 (1 < n < 1000000000) Solution 数位DP&#xff0c;题目需要包含13&#xff0c;且被13整除&#xff0c;所以状态应该多2个&#xff0c; \(F[i][j][k]\)表示位数为i&#xff0c;余数为j&#xff0…

alpha版、beta版、rc版的意思

2019独角兽企业重金招聘Python工程师标准>>> alpha版、beta版、rc版的意思 - a3015440的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/a3015440/article/details/6178568 很多软件在正式发布前都会发布一些预览版或者测试版&#xff0c;一般都叫“beta版”或者 …

C语言编译器不能帮你完成这项检查

C语言编译器不能帮你完成这项检查 工作中同事分享的一个小问题&#xff0c;特此记录以下。C语言编译器仅检查声明而不检查定义。C语言编译器只能检查代码中引用的其他函数是否存在声明&#xff0c;只有在链接时才会去找到真正的函数定义即链接地址。出现问题&#xff1a;main.c…

设计模式之结构模式

2019独角兽企业重金招聘Python工程师标准>>> 设计模式之结构模式 一、概述 1.1 简述 告别面向过程&#xff1a; 从汇编到C&#xff0c;由于机器的执行都是通过有顺序的&#xff0c;我们的编程都是面向过程&#xff0c;可以极大的提高系统资源的利用率。当越来越多的…

WPF's Style BasedOn

原文:WPFs Style BasedOn1 <Style x:Key"BasedStyle" BasedOn"{x:Null}" TargetType"{x:Type Control}"> 2 <Setter Property"FontFamily" Value"Microsoft YaHei" /> 3 <Setter Property"Font…

redis服务器及采集端设置

redis&#xff08;logstash&#xff09;.conf内容 #服务端配置,logstash抓取redis数据&#xff0c;配置名自取例一 #从redis读数据input {redis {host > "127.0.0.1"port > 6379type > "redis-input"dat…

7.配置zabbix报警

1.配置报警媒介&#xff1a;&#xff08;1&#xff09;点击administration下面的media types&#xff08;2&#xff09;点击右上角的create media type邮件报警我们使用centos的sendmail短信报警我们使用云片网的短信通道报警脚本的存放位置我们可以通过查看zabbix_server.conf…