学习java(9)集合概述

南楼画角 提交于 2019-12-29 22:48:46

一、集合概述:
1、java的集合类是一些常用的数据结构,例如:队列、栈、链表……
2、java集合就像一种“容器”,用于存储数量不等的对象,并按照规范实现一些常用的操作和算法。程序员在使用java的集合类是,不必考虑数据结构和算法的具体实现细节,根据需要直接使用这些集合类并调用相应的方法即可,从而提高了开发效率。
二、java集合框架:
1、在5.0之前,java集合会丢失容器中所有对象的数据类型。将所有对象都当成object类进行处理,从JDK5.0增加泛型以后,java集合完全支持泛型,可以记住容器中对象的数据类型从而可以编写更简洁、健壮的代码。
2、在java.util.concurrent包下提供了一些多线程的集合类。
3、Java的集合类主要由两个接口派生而出:Collection和Map接口。
三、java中的集合分为三大类:
1、set集合:将一个对象添加到set集合石,set集合无法记住添加顺序,因此set集合中的元素不能重复,否则系统无法识别到该元素,访问set集合中的元素也只能根据元素本身进行访问。
2、list集合:与数组类似,list集合可以记住每次添加元素的顺序,因此可以根据元素的索引访问list集合中的元素,list集合中的元素可以重复且长度是可变的。
3、map集合:每个元素都是有key/value键值对组成,可以根据每个元素的key来访问对应的value,map集合中的key不允许重复,value可以重复。
四、迭代器接口:
1、迭代器(Iterator)可以采用统一的方式对collection集合中的元素进行遍历操作,开发人员无需关心collection集合中的内容,也不必实现IEnumerable或者IEnumerator接口就能使用foreach 循环遍历集合中的部分或全部元素。
2、Java从JDK5.0开始增加了Iterable接口。
五、Collection接口:
Collection接口是set、queue和list接口的父接口。
六、list接口及其实现类:
1、list是collection接口的子接口,可以使用collection接口中的全部方法。因为list是有序、可重复的结合,所以list接口中又增加了一些根据索引操作集合元素的方法。
七、set接口:
1、set接口类似一个罐子,可以将多个元素丢进罐子里,但不能记住顺序因此不允许包含相同的元素。
2、HashSet集合:
(1)HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。当向HashSet集合中添加一个元素时,首先会调用该元素的hashCode()方法来确定元素的存储位置然后再调用元素对象的equals()方法来确保该位置没有重复元素。Set集合与list集合存取元素的方式都一样。
(2)通过forEach(Consumer action)方法遍历所有的元素并输出打印。
(3)为了保证HashSet正常工作,要求在存入对象时,需要重写Object类中的hashCode()和equals()方法。
3、TreeSet集合:
(1)TreeSet是Set接口的另一个实现类,它内部采用平衡二叉树来存储元素,这样的结构可以保证TreeSet集合中没有重复元素,并且可以对元素进行排序。
(2)二叉树中元素的存储过程:当二叉树中存入新元素时,新元素首先会与第一个元素(最顶层元素)进行比较,如果小于第个元素就执行左边的分支,继续喝该分支的子元素进行比较;如果大于第一个元素就执行右边的分支,继续和该分支的子元素进行比较。如此往复,直到与最后一个元素进行比较时,如果新元素小于最后一个元素就将其放在最后一个元素的左子树上如果大于最后一个元素就将其放在最后一个元素的右子树上。
(3)自然排序:自然排序要求向TreeSet集合中存储的元素所在类必须实现Comparable接口,并重写compareTo()方法,然后TreeSet集合就会对该类型元素使用compareTo()方法进行比较,并默认进行升序排序。
(4)定制排序:如果希望存储在TreeSet集合中的字符可以按照长度而不是英文字母的顺序来进行排序,这时,可以通过在创建TreeSet集合时就自定义一个比较器来对元素进行定制排序。
八、Map接口:
1、Map接口是一种双列集合买他的每个元素都包含一个键对象Key和值对象Value,键和值对象之间存在一种对应关系,称为映射。Map中的映射关系是一对一的,一个键对象对应唯一一个值对象,其中键对象和值对象可以是任意数据类型,并且键对象不允许重复,这样在访问Map集合中的元素师,只要指定了Key,就能找到对应的Value。
2、HashMap集合:HashMap集合是Map接口的一个实现类,它用于存储键值映射关系,该集合的键和值允许为空,但键不能重复,且集合中的元素是无序的。
3、Map集合遍历:
(1)Iteraror迭代器遍历Map集合:
①keyset():需要先将Map集合中所有的键对象转换为Set单列集合接着将包含键对象的Set集合转换为Iterator接口对象,然后遍历Map集合中的所有的键,再根据键获取相应的值。
②entrySet():将原有的Map集合中的键值作为一个整体返回为Set集合接着将包含键值的对象的Set集合转换为Iterator接口对象,然后获取集合中的所有的键值对映射关系,再从映射关系中取出键和值。
(2)forEach方法遍历Map集合:使用Lambda表达式来进行集合遍历。
4、TreeMap集合:它也是用来存储键值映射关系的,并且不允许出现重复键。在TreeMap内部是通过二叉树的原理来保证键的唯一性,这与TreeSet集合存储的原理一样,因此TreeMap中所有的键值是按照某种顺序排列的。
九、泛型:
1、泛型可以限定操作的数据类型,在定义集合类时,可以使用“<参数化类型>”的方式指定该集合中存储的数据类型。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!