Java学习之==>集合体系(待续。。)
一、概述
Java的集合体系,本质上是一个陈放数据的容器,像之前学过的数组也是陈放数据的容器,但在 Java 中数组的长度是固定的,使用起来没那么方便。集合提供了更加强大的功能,使用起来也更方便和快捷。集合体系中提供的方法的底层源代码采用的也是优秀的高效率算法,其他数据容器能操作的,集合都能操作,而且代码更加简洁,思路更加清晰,运行的效率更加高。因此,完全掌握完集合。编程的技能会进一步提高。
二、集合体系
集合作为一个容器,可以存储多个元素,但是由于数据结构的不同,Java 提供了多种集合类,将集合类中共性的功能不断向上抽取,最终形成了集合体系结构。
Java中集合体系的关系图:
Collection:
Map:
- List、Set、Map 都是接口,List 和 Set 继承自 Collection 接口,Map 为独立接口;
- AbstractCollection 作为 AbstractList、HashSet、TreeSet 的父类,实现自 Collection;
- Set下有 HashSet、TreeSet、LinkedHashSet,LinkedHashSet 继承自 HashSet,实现自 Set,HashSet、TreeSet继承自 AbstractCollection 实现自Set;
- List下有ArrayList、LinkedList、Vector,这三者继承自 AbstractList,而 AbstractList 继承自 AbstractCollection,实现自 List;
- Map下有 AbstractMap、HashMap、TreeMap、LinkedHashMap;
三、Collection体系
1、Collection
- 常见的方法有:add()、clear()、contains()、remove()等方法;
- 从 Iterable 接口继承了 iterator() 和 splititerator() 方法;
- 重要实现接口为 List、Set 和 Queue;
2、List
存储特点:
- 有序;
- 可重复;
重要实现类:
- ArrayList
- LinkedList
3、LinkedList
数据结构:
- List是描述有序集合;
- LinkedList是内部使用链表来实现的有序集合;
体系机构图:
4、ArrayList
数据结构
- List是描述有序集合;
- ArrayList是内部使用数组实现的有序集合;
体系结构图
ArrayList VS LinkedList
- 使用完全一致,因为实现自相同的接口List;
- ArrayList适合随机地操作(get,set)列表每个元素(数组的特性)的场景?;
- LinkedList适合插入和删除比较频繁的场景?;
场景略有区别(这一点不准确):?
ArrayList VS Vector
- 内部实现基本一致,略微差异不过是个人的一些写法问题;
- Vector是线程安全的,ArrayList是非线程安全的,在无线程安全需要的情况下,使用ArrayList;
- 注: 一般列表的操作,多数是在线程内操作,因此涉及多线程的场景不是很多;
ArrayList 与 LinkedList 性能测试
我们先来写下面一段测试代码:
/**
* 自测下ArrayList与LinkedList在本地的机器上的性能
*
* 主要是验证 LinkedList是不是所有数据都是删除和修改最快
*
*/
public class Topic1 { public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>(); long start = System.currentTimeMillis();
for (int i=0;i<=10000;i++){
list1.add(i);
}
long end = System.currentTimeMillis();
System.out.println("arraylist time:" + (end - start)); List<Integer> list2 = new LinkedList<>(); long start1 = System.currentTimeMillis();
for (int i=0;i<=10000;i++){
list2.add(i);
}
long end1 = System.currentTimeMillis();
System.out.println("linkedList time:" + (end1 - start1)); }
测试代码
我们分别测试往 ArrayList 和 LinkedList 中添加 1万、10万、80万、100万条数据,查看其执行时间,运行结果如下:
到80万条数据时,ArrayList 用时已经比 LinkedList 少,只不过这时时间还比较接近。
以上结果分别代表1万、10万、80万、100万条数据的测试结果,到100万条数据时,ArrayList 所用时间远远少于 LinkedList。
所以,我们说LinkedList适合插入和删除比较频繁的场景是不准确的,和数据量的大小有关。
四、Set
存储特点:
- 无序;
- 不可重复;
重要实现类:
- HashSet;
- LinkedHashSet;
1、HashSet
数据结构:
- 散列集;
体系结构图:
2、LinkedHashSet
数据结构:
- 散列集;
体系结构图:
五、Map
重要实现类
- HashMap;
- LinkedHashMap;
- TreeMap;
Map体系结构图
未完待续。。。
最新文章
- The Hacker&#39;s Guide To Python 单元测试
- OAF_文件系列7_实现OAF处理Excel的JXL包介绍(概念)
- Qt StyleSheet皮肤(黑色,比较好看,而且很全)
- 避免写出IE Bug
- JS原生方法实现jQuery的ready()
- canvas制作简单动画
- cidaemon.exe过程cpu入住率和关闭cidaemon.exe加工方法
- 轨道sql谈话 dbms_monitor
- Django—模板渲染
- mwValidate.js验证插件
- OpenID Connect + OAuth2.0
- Java程序简介
- 基于DobboX的SOA服务集群搭建
- Java中多线程访问冲突的解决方式
- 按行拆分文本文件与合并文本文件---I/O流---java
- Unity3D插件-自制小插件、简化代码便于使用(新手至高手进阶必经之路)
- .Net框架搭建:SQL Server EF MVC简单三层框架
- 使用Navicat for Oracle工具连接oracle
- 使用keep-alive 实现 页面回退不刷新内容
- JAVA-JSP动作元素之param
热门文章
- 简单了解 TCP TCP/IP HTTP HTTPS
- springboot集成dubbo服务报错No provider available for the service
- C#和Java的最大不同
- [报错] Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
- 【bzoj 4046 加强版】Pork barrel
- 我说CMMI之五:CMMI 4个等级的区别--转载
- html中删除表格的一行(有弹窗)
- 如何使用git回退部分修改(转)
- 【转】深入理解Java多态性
- C++:std::map的遍历