集合
集合(容器):存储任意类型的数据(引用数据类型)
根据数据的增删长度自动改变
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存储机制

目录
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维护的
排序去重,只和比较器有关
本文深入解析了Java中的List(如ArrayList和Vector)、Set(如TreeSet和HashSet)和Map(如HashMap和TreeMap)的基本概念、特性、操作方法及应用场景,重点讲解了它们的内部实现机制和比较规则。
1万+

被折叠的 条评论
为什么被折叠?



