Java基础_集合
概念:
一种工具类,是一个用来存放对象的容器;存放的是对象的引用;
与数组的区别:
集合 | 数组 |
---|---|
可以存放不同类型的; | 存放的是同一类型; |
不固定长度; | 固定长度; |
对象一定是引用类型; | 元素可以是基础类型,也可以是引用类型; |
集合框架体系:
Collection和Collections的区别:
Collection: 是抽象的,无法实例化;是集合类的上级接口,子接口有 Set、List、LinkedList、ArrayList、Vector、Stack、Set;
Collections: 是集合类的一个帮助类, 它包含有各种有关集合操作的静态多态方法,用于实现对各种集合的搜索、排序、线程安全化等操作。此类不能实例化,就像一个工具类,服务于Java的Collection框架Comparable接口;例如:Comparator接口;迭代器——Iterator接口;提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作;Iterator对象称作迭代器,用以方便的实现对象容器内元素的遍历操作;
泛型:
参数声明部分包含一个或多个参数类型;操作的数据类型参数化;
代码路径:E:\IDEA_Study\Scattered_Study\Study\src\集合\GenericMethodTest.java
链接: https://www.w3cschool.cn/java/java-generics.html
ArrayList和LinkedList:
ArrayList: 底层是Array数组,数组扩容实现;
LinkedList: 底层是双向链表;
代码路径:E:\IDEA_Study\Scattered_Study\Study\src\集合\ListTest.java
ArrayList和Vector:
ArrayList | 非线程安全 | 内存不足时默认扩展成1.5倍 |
Vector | 线程安全 | 默认扩展成2倍 |
HashSet、LinkedHashSet和TreeSet:
HashSet: 是哈希表实现,不保证元素排序;不是同步的;集合元素可以为null,但只能有一个;HashSet调用HashCode()方法来得到hashCode值,根据hashCode值来决定hashCode中的位置;
LinkedHashSet: 同样根据hashCode()来决定元素的存储位置,同时使用链表维护元素的次序;
TreeSet: 是二叉树实现,数据自动排序;不允许null值;Set的子类SortedSet接口的唯一实现类;是使用树结构存储Set接口的实现;确保元素处于排序状态;支持自然排序和定制排序;自然排序使用CompareTo方法比较元素间的大小,按照升序排列;定制排序使用Comparator接口,实现Compare()方法;
HashMap、TreeMap、HashTable、ConcurrentHashMap:
HashMap | 非线程安全 | 允许null作为key和value | 是HashTable的轻链接实现 | 继承自AbstractMap类 | 非sychronize的 | |
TreeMap | 非线程安全 | 不允许null作为key和value | 继承自AbstractMap类 | 非sychronize的 | 存入元素应当实现了Comparator接口或者Comparable接口;按照排序后的顺序迭代元素 | |
Hashtable | 线程安全 | 不允许null作为key和value | 继承自Dictionary类 | 是sychronize的 | 迭代过程中会锁定整个map | |
ConcurrentHashMap | 线程安全 | 不允许null作为key和value | 继承自ReentrantLock类 | 是sychronize的 | 采用锁分段技术,将整个Hash桶进行了分段segment,插入元素时先找到插入哪一段segment,然后插入,需要提前获取segment锁; 引入分割,在迭代过程中仅锁定部分map; |
List、Set、Map:
链接: https://www.cnblogs.com/IvesHe/p/6108933.html
堆和栈的区别:
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配;
堆内存用来存放由new创建的对象和数组,在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理;
递归调用可以导致栈溢出;不断创建对象可以导致堆溢出;
链接: https://blog.csdn.net/u011546655/article/details/52170470