首页 > 编程知识 正文

有关集合的知识点总结,java实验总结

时间:2023-05-04 11:41:23 阅读:41712 作者:127

3358 www.Sina.com/http://www.Sina.com/Java是面向对象的语言,我们编程时当然需要存储对象的容器,数组可以满足这个需要

1、前言

)长度差异:集合长度可变,数组长度不可变

)2)内容差异:集合中可以容纳不同类型的元素,数组中只能容纳单一类型的元素

)3)元素区分:集合中只能存储引用型元素。 数组可以同时包含引用类型和基本类型

1.1由来

Java集合的框架图:

注:上图中粉色为接口,紫色和蓝色边框为安装类。

Java集合从两个主要接口开始: Collection接口和Map接口。 这些是同一水平的。

1.2集合与数组的区别接口由List接口和Set接口继承;

List接口有三个实现类: ArrayList、链接列表和Vector。

Set接口在HashSet类中实现,由SortedSet接口继承,同时TreeSet类实现SortedSet接口,链接的HashSet类继承HashSet类

1.3集合概述接口有两个实现类,HashMap、HashTable,同时Propertise类继承HashTable;

Map接口由SortedMap接口继承,同时TreeMap类实现了SortedMap接口;

2、详述2.1Collection接口(单列集合)

Collection接口是Collection上的顶级接口,它定义了几种常用的方法。

add(e )添加元素; clear ) )移除空元素remove(e )元素; size ) )元素数;

toArray ) )集合序列contains(e )判断元素是否存在isEmpty ) )判断集合是否为空;

2.1.1列表接口

特点:有索引,准确操作要素;

元素有序,保存和取出顺序一致;

元素是可重复的(.equals ) )中比较是否重复。

我们利用索引(index )定义了一些特殊的方法。

get(intindex,e )取得指定位置的要素; 移除(索引)删除指定位置的元素;

添加(索引,e )在指定位置添加元素; set(intindex,e )将指定位置的要素置换为要素;

Map

数据结构:数组;

特点:查询快、删除慢,主要用于查询遍历数据,是最常用的集合之一;

基础分析:数组结构是一个规则的元素数组,在内存中打开连续的空间,在空间中存储元素,每个空间都有一个编号,通过编号可以快速找到对应的元素,所以查询快速的数组初始化时长度是固定的,要添加和删除元素,需要新的

单列集合

数据结构:双向链表

特点:咨询慢,增删快

底层分析:链表分为单向和双向,是一条链和两条链的区别; 由于许多链记录了元素的顺序,单向链表结构无序,双向链表结构有序; 由于链表结构中没有索引,查询较慢的链表添加/删除会加快添加/删除速度,因为它只是将链连接到原始位置或断开链。

特有方法: getFirst ) )返回第一要素; getLast ) )返回末尾元素;

pop ) )从堆栈中获取元素; 推(e )将元素推入堆栈;

在开头添加addfirst(e )元素,插入头部; 将addlast(e )元素添加到末尾并插入末尾;

2.1.1.1ArrayList实现类

数据结构:数组;

特点:搜索快,删除慢

基础分析:与ArrayList一样是数组实现,因此具有相似的特性。 这些区别在于,Vector在线程安全且效率低下。 ArrayList虽然不是线程安全的,但效率很高。

ps:Vector出现在JDK1.0中。 JDK1.2集合出现时,Vector被归类为List实现类之一,此时ArrayList出现。 Vector是一个旧的集合,《Java编程思想》提到它有一些遗留的缺点,因此不建议使用。

2.1.2Set接口

特点:元素不可重复;

要素无序,保存和取出时顺序不一致;

因为没有索引,所以不能使用普通的For

循环遍历;

Set与Collection 接口中的方法基本一致,没有进行功能上的扩充;

2.1.2.1HashSet实现类

数据结构:JDK1.8之前:哈希表(数组+单向链表);JDK1.8之后:哈希表(数组+单向链表+红黑树),当链表长度超过阈值(8)时,链表将转换为红黑树。

特点:查询快,元素无序,元素不可重复,没有索引;

底层分析:哈希表底层用数组+单向链表实现,即使用链表处理冲突,同一Hash值的元素都存储在一个链表里,但是当位于一个链表中的元素较多,即Hash值相等的元素较多,通过key值依次查找的效率降低。JDK1.8之后,哈希表底层采用数据+单向链表+红黑树实现,当链表长度超过阈值(8)时,链表将转换为红黑树,极大缩短查询时间。

ps:哈希值是一个十进制的整数,是对象的地址值,是一个逻辑地址,不是实际存储的物理地址,由系统随机给出。Object类的int hashCode()方法,可以获取对象的哈希值。

2.1.2.2LinkedHashSet实现类

数据结构:JDK1.8之前:哈希表(数组+双向链表);JDK1.8之后:哈希表(数组+双向链表+红黑树),当链表长度超过阈值(8)时,链表将转换为红黑树。

特点:查询快,元素有序,元素不可重复,没有索引;

底层分析:作为HashSet的子类,只是比它多了一条链表,这条链表用来记录元素顺序,因此LinkedHashSet其中的元素有序。

2.1.2.3TreeSet实现类

数据结构:红黑树     

特点:查询快,元素有序,元素不可重复,没有索引;

底层分析:TreeSet实现了继承于Set接口的SortedSet接口 ,它支持两种排序方法,自然排序和定制排序,自然排序的意思就是放入元素“a”,“b”,a会自然地排在b前面,其中还有几个特有方法。

first() 返回第一个元素; last() 返回最后一个元素;comparator() 返回排序比较器;

2.2Map接口(双列集合)

特点:元素包含两个值(key,value)即键值对, key不允许重复,value可以重复, key与value是一一对应的。元素无序;

Map接口是双列集合的最顶层接口,定义了一些通用的方法。

put(key , value) 添加元素; remove(key) 删除key对应元素;

containsKey(key) 判断是否存在key对应元素;get(key) 获取key对应元素;

KeySet() 获取所有的key,存到Set集合中;entrySet() 获取所有的元素,存到Set集合中;

ps:Map集合必须保证保证key唯一,作为key,必须重写hashCode方法和equals方法,以保证key唯一。

2.2.1HashMap实现类

数据结构:JDK1.8之前:哈希表(数组+单向链表);JDK1.8之后:哈希表(数组+单向链表+红黑树),当链表长度超过阈值(8)时,链表将转换为红黑树。

特点:查询快,元素无序,key不允许重复但可以为null,value可以重复。

底层分析:和HashSet底层相类似,不赘述。

2.2.2LinkedHashMap实现类

数据结构:JDK1.8之前:哈希表(数组+双向链表);JDK1.8之后:哈希表(数组+双向链表+红黑树),当链表长度超过阈值(8)时,链表将转换为红黑树。

特点:查询快,元素有序,key不允许重复但可以为null,value可以重复。

底层分析:和LinkedHashSet底层相类似,不赘述。

2.2.3HashTable实现类(基本不用)

数据结构:哈希表

特点:查询快,元素无序,key不允许重复并且不可以为null,value可以重复。

底层分析:HashTable和Vector一样是古老的集合,有遗留缺陷,在JDK1.2之后 被更先进的集合取代了;HashTable是线程安全的,速度慢,HashMap是线程不安全的,速度快;

ps:Hashtable的子类Properties现在依然活跃,Properties集合是一个唯一和IO流结合的集合。

2.2.3TreeMap实现类

数据结构:红黑树

特点:查询快,元素有序,key不允许重复并且不可以为null,value可以重复。

底层分析:和TreeSet底层相类似,不赘述。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。