
超详细集合架构图


首先是collection集合(单列集合):
首先是list集合:
list是有序集合,用户可以精准看到每个集合的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素
list集合特点:有序,允许重复的元素,元素存取有序

list集合的迭代器:
通过list集合的Listlterrator()方法得到,所以说他是集合list特有的迭代器
用于允许程序员沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
List<String> list = new ArrayList<String>(); //创建集合对象
list.add("hello"); //添加元素
list.add("world");
ListIterator<String> lit = list.listIterator(); //获取列表迭代器
while (lit.hasNext()) {
String s = lit.next();
if(s.equals("world")) lit.add("javaee");
}
ArrayList:底层是数组结构实现,查询快,增删慢(动态数组)
泛型的使用:约束集合中的存储数据类型
创建集合对象:
//创建ArrayList集合对象
ArrayList<Student> array = new ArrayList<Student>();
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("张曼玉", 35);
array.add(s1);
array.add(s2);
//迭代器:集合特有的遍历方式
Iterator<Student> it = array.iterator();
while (it.hasNext()) {
Student s = it.next();
System.out.println(s.getName() + "," + s.getAge());
}
//普通for:带有索引的遍历方式
for(int i=0; i<array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
//增强for:最方便的遍历方式
for(Student s : array) {
System.out.println(s.getName() + "," + s.getAge());
}
Linkedlist:
LinkedList:底层是链表结构实现,查询慢,增删快(底层:双向链表)
、Set 无序集合:
Set集合的特点:元素存取无序、没有索引(只能迭代器/增强for循环遍历)、不能存储重复元素
哈希值:
Hash值:是JDK根据对象的地址/字符串/数字算出来的int类型的数值
如何获取哈希值:Object类中的public int hashCode():返回对象的哈希码值
哈希值的特点
同一个对象多次调用hashCode()方法返回的哈希值是相同的
默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
hashSet:
- 底层数据结构是哈希表
- 对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
- 没有带索引的方法,所以不能使用普通for循环遍历
- 由于是Set集合,所以是不包含重复元素的集合
TreeSet
TreeSet:元素有序,可以按照一定的规则进行排序,具体排序方式取决于构造方法
Map集合:
Map集合特点 :key:value对映射关系、键不能重复,值可以重复、元素存取无序

HashMap ⭐
:::tips
概述:HashMap使用哈希表来存储数据,通过计算键的哈希值来确定其在内部数组中的存储位置。
HashMap的键是唯一的,如果插入相同的键,新的值会覆盖旧的值。它不保证键值对的顺序,也不保证插入顺序和访问顺序一致。
使用HashMap可以快速地插入、获取、更新和删除键值对,其时间复杂度为O(1)。它是线程不安全的,需要在多线程环境下使用可以使用ConcurrentHashMap。
HashMap在遍历时,不保证元素的顺序,如果需要有序遍历,可以考虑使用LinkedHashMap。此外,由于哈希碰撞的存在,当键的哈希值相同时,会使用链表或红黑树等数据结构来解决冲突,以保证性能。
- 增加(put)操作:添加键值对的时间复杂度为O(1)。
- 删除(remove)操作:删除键值对的时间复杂度为O(1)。
- 修改(put)操作:修改键值对的时间复杂度为O(1)。
- 查找(get)操作:根据键获取值的时间复杂度为O(1)。