集合的基本概念

本文深入解析了Java中的List(如ArrayList和Vector)、Set(如TreeSet和HashSet)和Map(如HashMap和TreeMap)的基本概念、特性、操作方法及应用场景,重点讲解了它们的内部实现机制和比较规则。

集合

集合(容器):存储任意类型的数据(引用数据类型)

根据数据的增删长度自动改变

set:无序,去重

List:有序,可重

1.List

概念:有序,有索引,可重复

新增方法:根据索引操作的功能

泛型<类型>:检查集合中所有元素的数据类型;优点:规范数据的稳定性与可读性

1.1ArrayList

有序(添加的顺序和内部存储数据的顺序一致|有索引,可重复)

底层:数组|可变数组

特点:查询效率高,增删效率低

应用场景:适合用于大量查询,少量增删场景

扩容机制:初始容量默认为10,每次扩容为原容量的1.5倍;当原数组加满时才扩容

1.2Verctor

与ArrayList相似

1.扩容:vector每次扩容原容量的2倍

2.同步问题:Vector线程安全|同步

Arraylist 不安全|不同步

注意:定义ArrayList存储自定义引用数据类型数据的时候,javabean应重写to string和equals

Javabean规范:1.类是公共的

2.至少提供一个空构造

3.属性私有化

4..公共的访问方式

5.tostring方法与equals重写

6.根据需要实现序列化接口

链表

特点:查询效率低,增删效率高

应用场景:大量做增删,少量做查询,数据以节点为单位

新增方法:根据链表头尾进行操作方法

1.3LikedList

有序 可重复

底层:双向链表

2.Set

无序,不可重复

无序:添加的顺序与内部真实存储的顺序不一致

无新增功能

2.1可变参数

1.参数的个数可以为0~N个,但是可变的类型要保持一致

2.可变参数必须存在于参数列表最后位置的

3.可变参数会构建一个数组,使用可变的参数的时候要使用数组的操作方式

2.2TreeSet

底层:红黑树(平衡二叉树)

特点:数据默认升序排序

应用场景:存放多个数据中不允许重复数据,并且想要排序就可选中使用TreeSet

注意:不同类型数据不能使用TreeSet实现排序

自定义引用数据类型对象存储要求定义比较规则

比较规则:

1)外部比较器|定制排序:比较规则定义,定义在类的外部实现Comparator接口 重写compare方法

2)内部:自定义数据类型实现Comparable<>jie接口,重写comparaTo方法,方法的内部指定当前类型数据比较规则

总结:在定义TreeSet集合的时候

构造器的参数指定使用那一种外部比较规则,如果没有外部,默认找到数据内部,否则报错:类型转换异常

可以用匿名内部类来简化使用次数少的类

Tree新增了一些比较方法

2.3HashSet

无序,不可重复;

底层:哈希表(数组+链表+红黑树)是由HashMap维护

哈希表:结构中的链表;单向链点

当单向链表中数据>8长度,总长度>64 把单向链表变成红黑树

1)hashcode与equals

hashcode:对象的整数表达形式

Object:默认根据地址计算

子类重写:根据成员变量的值计算

2)equals:比较对象是否相等

Object:根据对象地址比较

子类重写:根据内容(所有成员变量的值)

存储语法:

 

hashcode与equals方法的区别?

hashcode相等,证明数据存储在同一位桶中,但是equals不一定相等,所有多个数据之间才使用链存储。

equals相等就是相同的对象,必须存在同一桶中,否则无法实现去重,所以要求必须根据成员变量的值,重写hashcode的实现

hashcode存在可以提高,哈希表结构存储数据的效率,减少调用equals的次数,提高效率。

3.Map

键值对的集合

key:唯一的,去重的,无序的

value:可以重复,无序的

一个key只能对应一个value

一个key对应一个value,value可以为一个数组,一个集合

当key相同,value会覆盖前面

被覆盖的返回null,覆盖的返回被覆盖值

Map的遍历方式

1)keySet():获取所有的key,得到set集合

2)values():获取所有的value

3)entrySet():获取所有的键值对

3.1HashMap

底层:哈希表(数组+链表+红黑)

基于哈希表的Map接口的实现。并允许null和null键

初始化因子:16 哈希表结构中的数组的默认初始长度

加载因子:0.75=loadFactor

扩容机制:内部的数组为原容量的2倍

HashMap存储机制

目录

集合

1.List

1.1ArrayList

1.2Verctor

链表

1.3LikedList

2.Set

2.1可变参数

2.2TreeSet

2.3HashSet

3.Map

3.1HashMap

3.1 TreeMap


 

 

HashMap与HashTable的区别

1.继承体现不同

2.null值的要求不同

HashMap:允许null值和null键

HashTable:键值对都不能

3.同步问题

HashMap:线程不安全|不同步的哈希表

HashTable:线程安全|同步的哈希表

内部方法通过synchronized(同步控制线程安全)

4.初始容量,扩容机制不同

HashMap:初始:16 扩容:2倍

HashTable:初始:11 扩容:2倍+1

5.hash实现不同 (求位通的索引方式不同)

HashTable:key.hashCode();

3.1 TreeMap

底层:红黑树

实现:根据key做存储,根据key去重,TreeSet底层是由TreeMap维护的

排序去重,只和比较器有关

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值