📚集合
接口名:Collection
父接口:Iterable
单列集合
由一个或多个确定的元素所构成的整体。
从上面的图中可以得知 Collection 接口继承了 Iterabe 接口,通过 Iterabe 接口源码的描述 Returns an iterator over elements of type {@code T}.
返回一个迭代器,迭代器对象可以通过遍历获取集合的元素。图中最底层的类都实现了 Collection 接口,因此可以说最底层的类也有 Iterable 接口的特性想要获取元素就需要通过迭代的方式。
Collection set = new ArrayList();
set.add("hjh");
set.add(1903);
首先实例化 ArrayList 类,然后添加两个用于测试的数据。
Iterator iter = set.iterator(); // 实例化 Itr 类
while(iter.hasNext()){ // 判断是否存在元素
Object o = iter.next(); // 取出元素
System.out.println(o);
}
调用 ArrayList 类的 iterator 方法,这个方法会实例化 Itr 类。该 Itr 类实现了 Iterator 接口并提供了一些方法来操作这个迭代器,例如上面使用 hasNext
方法和 next
方法配合来获取集合里面的元素。
for(Object o : set){ // 强制 for 隐式地执行了上面的方法
System.out.println(o);
}
这个方法也和上面一样会进入 ArrayList 类并实例化 Itr 类后面完全一致了。
通过上面两种方式,可以看得出来都是通过实例化 Itr() 类,然后再通过该类的方法去获取集合的元素,唯一不同的是 while 用于更多的操作空间,例如使用 remove
来移除元素,利用属性 cursor
获取当前迭代器的游标等等。
📕List 接口
列表接口
元素可重复
有下标
添加元素的顺序和取出元素的顺序一致
类名 | 底层实现 | 线程安全 | 扩容倍数 |
---|---|---|---|
ArrayList | 可变数组 | 不安全 | 1.5 |
Vector | 可变数组 | 安全 | 2 |
LinkedList | 双向链表 | 不安全 | - |
- ArrayList 单线程时效率是高于 Vector
- Vector 适用于多线程,因为它的方法都是用 synchronized 修饰
- LinkedList 单线程时对集合元素进行增删操作的效率是高于 ArrayList
- ArrayList 单线程时对集合元素进行改查操作的效率高于 LinkedList
增查改删(CRUD)操作:add、get、set、remove
💡性能对照表
类名 | 增/2000000 | 查/2000000 | 改/2000000 | 删/100000 |
---|---|---|---|---|
ArrayList | 31ms | 6ms | 6ms | 432ms |
Vector | 48ms | 42ms | 42ms | 432ms |
LinkedList | 99ms | 194ms | 199ms | 3ms |
- LinkedList 查改的速度随着索引越靠后越慢
📕set 接口
集合接口
元素不可重复
无下标
添加元素的顺序可能和取出元素的顺序不一致
类名 | 数据结构 | 元素顺序 | 线程安全 | null |
---|---|---|---|---|
HashSet | 哈希表 | 无序 | 不安全 | 允许 |
TreeSet | 二叉树 | 排序 | 不安全 | 不允许 |
- HashSet 基于 HashMap 来实现的
- HashSet 以 hashcode 码作为标识
这也就是为什么相同内容的 String,只会有一个会存放在集合里面,因为他们的 hashcode 相同。 - TreeSet 是 SortedSet 接口的唯一实现类
- HashSet 存储性能优于 TreeSet
如果你是无意刷到这篇文章并看到这里,希望你给我的文章来一个赞赞👍👍。如果你不同意其中的内容或有什么问题都可以在下方评论区留下你的想法或疑惑,谢谢你的支持!!😀😀
参考文献
- 【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_bilibili
- Java 集合框架 | 菜鸟教程 (runoob)
更多推荐
【韩顺平 零基础30天学会Java】集合
发布评论