Java集合


                                                 集合

1.什么是集合?

集合就是一个存储数据的容器,准确来说就是放数据对象的引用的容器。

2.集合和数组的区别

1.集合长度是可变的,数组长度不可变

2.集合可以存储不同的数据类型的引用,不能存储基本数据类型。数组只能存储相同数据类型的数据,数据类型可以是基本数据类型,也可以是引用数据类型。

3.集合分为几类?

分为两个接口:1.collection 2.Map

4.什么是collection?

collection就是一个集合的根接口。

5.collection接口的子接口有哪些?

List接口 

set接口

6.List集合

6.List的特点:

集合中的元素允许重复

集合中的元素是有序的,各元素插入的顺序就是各元素的顺序

集合中的元素都是通过索引来访问或者设置的

6.List接口有哪些?

ArrayList:

底层是数组,通过索引来取值,存值

遍历方式一共有3种:

1.for循环

2.foreach循环

3.迭代器

优点:

随机查找和遍历快

缺点:

插入和删除慢

LinkedList:

Vector:

7.Map集合

HashMap:

7.1什么是hashmap

HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些键值对分散存储在一个数组当中,这个数组就是HashMap的主干,HashMap数组每一个元素的初始值都是Null,我们常用的两个方法是Get 和 Put。

数组:存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);寻址容易,插入和删除困难;

链表:单向链表是一种线性表,实际上是由节点(Node)组成的,一个链表拥有不定数量的节点。其数据在内存中存储是不连续的,它存储的数据分散在内存中,每个结点只能也只有它能知道下一个结点的存储位置。由N各节点(Node)组成单向链表,每一个Node记录本Node的数据及下一个Node。向外暴露的只有一个头节点(Head),我们对链表的所有操作,都是直接或者间接地通过其头节点来进行的。 

查看hashMap的API发现,它有4个构造函数:

1、构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。

2、指定初始容量和默认加载因子 (0.75) 的空 HashMap。

3、指定初始容量和默认加载因子的空HashMap。

4、构造一个映射关系与指定Map相同的新HashMap。

注意:HashMap使用的是懒加载,构造完HashMap对象后,只要不进行put方法插入元素之前,HashMap并不会去初始化或者扩容table。

首先判断是否是空数组(table == EMPTY_TABLE),如果是,开始初始化HashMap的table数据结构,然后执行扩容函数,如果未指定容量,默认是大小为16的表,然后根据加载因子计算临界值。什么是加载因子呢?hashMap的大小是一定的,如果不够存储了肯定要扩容,那么扩容的依据是什么呢,什么时候确定要扩容了呢?这个时候就需要引入加载因子这个概念,我们假使依旧使用默认大小16,加载因子0.75,那么当hashMap的size大于12(16*0.75=12)的时候,那么就会进行扩容。

回来说put方法,如果key是null,调用putForNullKey方法,保存null与key,这是HashMap允许为null的原因。然后计算hash值和用indexFor计算数据存在的位置,然后从i出开始迭代e,找到 key 保存的位置。

应用场景:

Map应用:

错误代码及其描述的映射。

邮政编码和城市map。

经理和员工的map。每个经理(关键)都与他管理的员工(价值)列表相关联。

课程和学生的map。每个班级(关键)都与学生名单(价值)相关联。

hashMap的应用:

Map中,HashMap具有超高的访问速度,如果我们只是在Map 中插入、删除和定位元素,而无关线程安全或者同步问题,HashMap 是最好的选择。

如果考虑线程安全或者写入速度的话,可以使用HashTable

如果想要按照存入数据先入先出的进行读取。 那么使用LinkedHashMap

如果需要让Map按照key进行升序或者降序排序,那就用TreeMap

hashmap是可以存放key和value均为null的,存放在table[0]的位置,此时使用put方法在添加元素的时候,如果在table[0]中已经存入key为null的元素则给null赋上新的value值并返回后面的值,否则则初始化null的元素,存入put里面存放的值。

TreeMap:

TreeMap实现0接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

 LinkedHashMap

LinkedHashMap是Map中常用的有序的两种实现之一, 它保存了记录的插入顺序,先进先出。

对于LinkedHashMap而言,它继承与HashMap,底层使用哈希表与双向链表来保存所有元素。其基本操作与父类HashMap相似,它通过重写父类相关的方法,来实现自己的链接列表特性。LinkedHashMap采用的hash算法和HashMap相同,但是它重新定义了数组中保存的元素Entry,该Entry除了保存当前对象的引用外,还保存了其上一个元素before和下一个元素after的引用,从而在哈希表的基础上又构成了双向链接列表

hash

has翻译为散列,音译为哈希,就是把任意长度的输入,通过散列算法,变成固定长度的输出,输出的就是散列值。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值