一、 概述
1.集合,数组都是对多个数据进行存储操作的结构,简称java容器
说明:此时的存储,只要指的是内存层面的存储,不涉及到持久化的存储(.txtjpg,.avi,数据)
2.数组在存储多个数据方面的特点
一旦初始化以后,其长度就确定了
数组一旦定义好,其元素的类型也就确定了。我们也就只能操作指定类型的数据了
比如:String[]arr,int[]arr1,Object[]arrw
3.数组在存储多个数组方面的缺点
一旦初始化以后,其长度就不可修改
数组中提供的方法非常有限,对于添加,删除,插入数据等操作,非常不便,同时效率不高
获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用
数组存储数据的特点:有序,可重复。对于无序,不可重复的需求,不能满足
4.集合框架体系
ArrayList的源码分析
结论:建议开发中使用带参的构造器:ArrayList list=new ArrayList(int capacity)
Jdk8中ArrayList的变化
LinkedList的源码分析
Veator的源码分析:jdk7和jdk8通过Vector()构造器创建对象时,底层都创建了长度为10的数组
在扩容方面,默认扩容为原来的数组长度的2倍
ArrayList,LinkedList,Vector三者的异同?
同:三各类都是实现了List接口,存储数据的特点相同:存储有序的,可重复的数据
不同:底层源码实现方式不同
ArrayList和LinkedList的异同
二者的线程都不安全,相对线程安全的Vector,执行效率高。此外,ArrayList时实现了基于动态数组的数据结构,LinkedList基于链表的数据结构,对于随机访问get和set,ArrayList觉得优于LinkedList比较占优势,因为LinledList要移动指针。对于新增和删除操作add(特指插入)和remove,LinkedList比较占优势,因为ArrayList要移动数据。
ArrayList和Vector的区别
Vector和ArrayList几乎是完全相同的,唯一的区别在于Vector是同步类(synchronized),属于强同步类,因为开销就比ArrayList要大,访问要慢。正常情况下,大多数的java程序员使用ArrayList而不是Vector,因为同步完全可以由程序员自己来控制。Vector每次扩容请求其大小的2倍空间,而ArrayList是1.5倍。
List中的方法
Viod add(int index,Object ele):在undex位置插入ele元素
Boolean addAll(int index, Collection eles):从index位置开始将eles中的所有被元素添加进来
IntindexOf(Object obj):返回obj在集合中首次出现的位置
intLastIndexOf(Object obj):返回obj在集合中末次出现的位置
Object remlove(int index):移除指定index位置元素,并返回此元素
Object set(int index,Object ele):设置指定index位置的元素ele
=List subList(int fromindex,int tonIndex):返回从fromIndex到toIndex()位置的子集合=
总结常用方法:
增:add(Object obj)
删:remove(int index)/remove(Object obj)
改:set(int index,Object ele)
查:get(int index)
插:add(int index,Object ele)
长度:size()
遍历:①Iterator迭代器方式②增强for循环③普通for循环
二、 Set接口框架
体系
Set:存储无序的,不可重复的数据
以HashSet为例说明
无序性:不等于随机性。存储的数据在底层数字中并非按照数组索引的顺序添加,而是根据数据的哈希值决定的
不可重复性:保证添加的元素按照equals()判断时,不能返回ture。即:相同的元素只能添加一个
添加元素过程:以HashSet为例
我们向HashSet中添加元素a,首先调用元素a所在类的hashCode()方法,计算元素a的哈希值,此哈希值接着通过某种算法计算出HashSet底层数组中的存放位置(即为:索引位置),判断数组此位置上是否已经有元素:
如果此位置上没有其他元素,则元素a添加成功–>情1
如果此位置上有其他元素b(或者链表的形式存在的多个元素),则比较元素a与元素b的hash值:
如果hash值不相同,则元素a添加成功—>情况2
如果hash值相同,则需要调用元素所在类的equals()方法
equals()返回true,元素a添加失败
equals()返回false,则元素a添加成功
LinkedHashSet的使用
LinkedHashSet作为HashSet的子类,在添加数据的同时,每个数据还维护了两个引用,记录此数据前一个数据和后一个数据
优点:对于频繁的遍历操作,LinkedHashSet效率高于HashSet
TreeSet的使用
向TreeSet中添加的数据,要求时相同的对象
两种排序方式:自然排序(实现Comparable接口)和制定排序(Comparator)
自然排序中,比较两个对象是否相同的标准为compareTo()返回0,不再是equals()
定制排序中,比较两个对象是否相同的标准为compaew()返回0,不再是equals()
三、Map接口
2.Map结构的理解
=Map中的kye:无序的,不可重复的,使用Set存储所有的key—>key所在的类要重写equals()和hashCode(以HashMap为例)=
=Map中的value:无序的,可重复的,使用Collection存储所有的value—>value所在类要重写equals()=
一个键值对:key-value构成了一个Entery对象
Map中的entry:无序的,不可重复的,使用Set存储所有的entry
3.HashMap的底层实现原理
4.LinkedHashMap的底层原理(了解)
5.Map的常用方法
添加,删除,修改操作
Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中
void putAll(Map m):将m中的所有key-value对存放到当前map中
Object remove(Object key):移除指定key-value对,并且返回value
void clear():清空当前map中的所有数据
查询操作
Object get(Object key):获取指定key对应的value
boolean containsKey(Object key):是否包含指定的key
boolean containsKey(Object value):是否包含指定的value
int size():返回map中key-value对的个数
boolean isEmpty():判断当前map和参数对象obj是否相等、
元视图操作方法
Set keyset():返回所有key构成的Set集合
Collection values():返回所有value构成的Collection集合
Set entrySet():返回所有key-vlue对构成的Set集合
总结常用方法
添加:put(Object key,Object value)
删除:remove(Object key)
修改:put(Object key,Object value)
查询:get(Object key)
长度:size()
遍历:keyset()/values()/entrySet()
6.TreeMap中添加key-value,要求key必须是由同一个类创建的对象
因为要按照key进行排序:自然排序,定制排序
7.Properties:常用来处理配置文件:key和value都是String类型
四、Collections集合工具类
常用方法
reverse(List):反转List中元素的顺序
shuffle(List):对List集合元素进行随机排序
sort(List):根据元素的自然顺序对指定List集合元素按升序排序
sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
swap(List,int,int):将指定List集合中i处元素和j处元素进行交换
Object max(Collection):根据元素的自然排序,返回给定集合中最大元素
Object max(Collection,Comparator):根据Comparator指定顺序,返回给定集合中最大元素
Object min(Collectton)
Object min(Collecton,Comparator)
int faequency(Collection,Object)返回指定集合中指定元素的出现次数
void copy(List dest,List src):将src中的内容复制到dest中
boolean replacecAll(List list,Object oldVal,Object newVal):使用新增值替换List对象的所有旧值
同步机制
Collection类中提供了多个synchronizedXxx()方法,该方法可使将指定集
合包装线程同步的集合,从而可以解决多线程并发访问集合时的线程安全
今天的文章Java中的集合框架包括哪些主要接口?_java版整合包推荐分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/75887.html