20201009_陈宇_
日志
学习总结:
ArrayList、Vector和LinkedList的区别:
相同点:
 ①.都是Java.util.List接口的实现子类
 ②.都是有序、可排序、可重复的集合,可存null
 ③.都支持迭代器操作
区别:
 1.实现接口不同:
 ArrayList和Vector未实现Queue接口、Deque接口,不支持队列操作
 LinkedList实现了Queue接口、Deque接口,支持队列操作,同时支持栈操作
 2.内部实现不同:
 ArrayList和Vector内部都采用数组来存储元素
 LinkedList内部采用链表存储元素
 3.线程安全:
 ArrayList和LinkedList都是非线程安全,适用于单线程环境
 Vector是线程安全,适用于多线程环境
 4.扩容方式不同:
 ArrayList是1.5倍扩容
 Vector是固定数值扩容
 LinkedList是链表结构,无需扩容
 5.增删效率不同:
 ArrayList和Vector内部都是数组存储,所以增删效率低
 LinkedList是链表结构,增删效率高
 6.访问效率不同:
 ArrayList和Vector内部是连续空间,访问效率高
 LinkedList不一定是连续空间,访问效率低
 7.初始容量不同:
 ArrayList和Vector初始容量是10
 LinkedList没有初始容量,也无需扩容
HashMap和Hashtable的异同:
相同点:
 都实现Map接口,用于存放键值对
 负载因子都是0.75
 都采用哈希表实现,都采用计算哈希键值对
区别:
 1.是否支持线程安全:
 Hashtable是线程安全的,效率较低
 HashMap是非线程安全的,效率较高
 2.内部实现不同:
 Hashtable内部是数组+链表实现的
 HashMap内部是数组+链表+红黑树实现的
 3.对元素位置的计算方法不同:
 Hashtable是直接用元素的hashCode求模得到元素的index值进行存储
 HashMap是用hash方法重新获取元素的hashCode值,再求模得到元素的index值去存储
 4.两者继承的类不同:
 Hashtable是继承的Dictionray类
 HashMap是继承AbstarctMap类
 5.是否支持null:
 Hashtable不允许存储null的键和值
 HashMap允许存储null的键和值
 6.初始容量不同:
 Hashtable的初始容量是10
 HashMap的初始容量是16
 7.扩容方式不同:
 Hashtable是旧容量的2倍+1
 HashMap是2倍的旧容量
LinkedHashMap:
 哈希表和双向链表实现的Map接口
 具有可预测的迭代次序(有序)
 非线程安全
 允许null
 初始容量和负载因子都是自己输入
 accessorder:表示的是存取顺序,true表示访问模式,false表示插入模式,默认是false
 插入模式:按照插入的顺序排放,始终不变
 访问模式:在访问某个节点后,会将此节点放到链表的后边去
Properties:
 Properties类表示一组持久的属性,Properties可以保存到流中或从流中加载,属性列表的每个键及其对应的值都是一个字符串
Set接口:
 Set描述的是一种比较简单的集合
 Set可以存储的是一组唯一、无序的元素
 Set常用的实现类有TreeSet和HashSet
HashSet:
 查找效率高
 集合内的元素是无序排列的
 HashSet类是非线程安全的
 允许存储null
 HashSet类不存在get()方法,所以Set接口无法使用普通for循环进行遍历,使用for-each和Iterator接口进行遍历
Collections:
 Collections类是Java提供方的一个集合操作工具类
 Collections和Collection是不同的,前者是集合的操作类,后者是集合接口
 如果提供给它们的集合或类对象为null,则此类的方法都会抛出一个NullPointException异常
 使用Comparable接口实现对象之间的比较大小
 Comparable队实现它的每个类的对象进行整体排序,这种排序被称为类的自然排序,类的compareTo()方法被称为它的自然比较方法
 compareTo()方法返回的是一个负整数,零或正整数,为别表示此对象是小于、等于还是大于指定对象的
 Comparator接口比较器:
 使用Comparator接口需要重写int compare()方法,当使用了实现Java.util.Comparator接口的比较器后,默认的Comparable比较器就不起作用了
 语法: int compare(Object obj1, Object obj2);
 binarySearch()队List集合进行查找时必须先排序
泛型:
 泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数,使代码可以应用于多种类型,提高代码重用率
 参数化类型:参数化类型包含一个类或者接口,以及实际的类型参数列表
 类型变量:是一种非限定行标识符,用来指定类,接口或者方法的类型
 泛型的定义:
                           ①类型
                           ②类型
                           ③类型<> 对象 = new 类型
 第③中定义了和没定义泛型区别不大,使用第一种或者第二种定义泛型
 泛型作为容器时没有意义,只能存null
 泛型作为参数列表才有意义
学习心得:
 今天把集合学习完了,说实话,已经完全搞混淆了,今明两天把集合的知识梳理总结一下,以便于理解集合,集合这一块的知识体系有点庞大,并且需要搞清楚那些类之间的关系还有实现了哪些接口,有些是类似的,但是还是有很多是有区别的,希望早点能够搞懂他们里面的那些方法的原理吧,这样才能更好的去理解记忆集合这里面的知识。



评论留言