Maven 是一个基于项目对象模型(POM,Project Object Model)的项目管理工具,主要用于 Java 项目的构建、依赖管理和项目信息管理。它简化了项目的构建过程,提供了一种标准化的方式来管理项目的构建、报告和文档。
Maven的约定
groupId
组织artifactId
功能(jar包)version
版本
Maven 通过以上3个属性就能唯一定位一个jar
包
|
|
Maven自动解决冲突的原则
距离最近的胜出
|
|
手动解决Maven冲突的办法
- 分析它们的依赖关系,了解谁被Maven自动解决掉了,然后手动修改正确包的
距离
- 如何修改包的
距离
?
答: 直接在项目中引用需要的依赖包,例如上面的例子,我们可以直接引用
C:0.0.2
这个包
- 手动指定排除某个依赖包
- 通过
exclusions
标签指定排除某个依赖包
|
|
Maven查看依赖关系树的命令
|
|
Maven包的作用域
<scope>compile</scope>
测试和生产中都有效<scope>test</scope>
只在测试时有效,不会发布出去<scope>provided</scope>
只在编译时有效
|
|
Collection接口
Collection是整个Collection继承体系的根接口,一个Collection代表一组对象
,它们被称作元素
,有些Collection允许重复的元素出现,有的不允许,有些是有序的,有些事无序的,JDK
不提供任何对这个接口的直接实现,而是提供了很多对它的子接口的实现,比如Set
和List
,说白了Collection代表一堆东西的集合
List接口
有序集合,元素可以重复,List接口可以根据索引想取哪个就取哪个
ArrayList底层是数组
结构
因为是数组,所以在插入新元素的时候,会判断是否需要扩容
那么ArrayList是怎么实现动态扩容的呢?
- 答:每当发现容量不够的时候,就创建一个更大的空间,然后把原先所有的数据拷贝过去
- 另外在进行元素插入的时候,需要移动插入位置之后的所有元素,位置越靠前,需要位移的元素越多,开销越大
因此
ArrayList
的特点是查询速度快
,增删改速度很慢
LinkedList底层是双向链表
结构
它比ArrayList多提供了4个不同位置的添加数据的方法
为什么链表结构比数组结构查询效率低,但更新效率比数组结构高?
- 顺序存储可以想象成吃饭排队,每个人领的号都是按顺序来的,服务员只要喊号就里立即可以找到对应的人,新来的人都自动加到队尾,如果有人想插队,那么从他插队的位置后面所有的人都要挪动位置。
- 链接存储可以想象成手拉手做游戏,每个人只知道自己手拉的是谁,想要找到某个人必须从一个节点开始往一个方向按顺序一个一个查,直到查到这个人,新来的人可以插到任意两个人之间,只要原来的那两个人把手放开和新来的拉起手即可,不需要其他人都跟着挪动
因此
LinkedList
的特点是查询速度慢
,但增删改速度快
Set接口
无序集合,并且不能包含重复元素,Set接口没有索引,因此只能通过迭代器来取出元素
HashSet底层是K,V
结构
实际上他就是包装了一层HashMap
,当程序向HashSet中添加元素时,HashSet会根据元素的hashCode值来计算它的存储位置,从而快速找到该元素,而添加元素时,实际上就是把元素作为Map
的K
,value
是一个固定的Object
对象
因此
HashSet
的特点是查询速度快
,增删改速度也还不错
LinkedHashSet底层是双向链表
结构
它拥有和LinkedList几乎一样的特性,由于是链表结构它的取出顺序和添加数据时的顺序一致
因此
LinkedHashSet
的特点是查询速度快
,增删改速度更快
TreeSet
TreeSet和HashSet唯一不同就是TreeSet可以对元素进行排序,但前提是元素要实现Comparable接口
Map接口
K,V键值对集合,K是不能重复的,Map集合有K,因此可以根据K,想取哪个就取哪个
HashMap底层是K,V
结构
HashMap是非线程安全的(它在多线程扩容的情况下可能会出现死循环)
ConcurrentHashMap
ConcurrentHashMap和HashMap唯一不同点是,它是线程安全的,如果你想保证线程安全,无脑用它就可以了
TreeMap
TreeMap和HashMap唯一不同就是TreeSet可以对元素进行排序,但前提是元素要实现Comparable接口
一些需要了解下的东西
- Arrays
- Collections
- Lists
- Sets
- Maps
- Queue(队列)
- Deque(双端队列)
- PriorityQueue(优先级队列)
- Vector(被ArrayList代替)
- Stack(被Deque代替)
- Guava(Google)