黑马程序员技术交流社区
标题:
多线程与的复习总结
[打印本页]
作者:
鹏Oba
时间:
2019-3-30 15:41
标题:
多线程与的复习总结
数据结构
查询快:数组的地址是连续的,我们通过数组的首地址可以找到数组,通过数组的索引可以快速的查找某一个元素
增删慢:数组的长度是固定的,我们想要增加/删除一个元素,必须要创建一个新数组,把源数组的数据复制过来再把新数组的地址赋值给变量,源数组会在内存中被销毁(垃圾回收)
ArrayList几个是如何保证长度可变
第一次创建集合对象时,底层会开辟一个的长度为10的数组空间,我们可以不断的添加元素!
添加完10个元素以后,集合会自动进行扩容,规则:每次开辟新数组的空间都是上一次数组长度的1.5倍
链表结构
查询慢:链表中的地址不是连续的,每次查询元素必须从头开始查询
增删慢:链表结构,增加/删除一个元素,对链表结构没有影响。所以增删快。
链表分类
单向链表:链表中只有一条链子,不能保证元素的顺序(存储在元素和取出元素的顺序可能不一致)
当前元素会记录下一个元素的地址值
双向链表:链表中有两条链子,有一条链子是专门记录元素的顺序,是一个有序集合
当前元素会记录下一个元素的地址值,同时下一个元素也会记录上一个元素的地址值
LinkedList集合查询的特点:
如果查询索引小于集合长度的/2,从前向后一个一个的查找。查找到传入的索引位置结束。
如果查询的索引大于等于集合长度/2,从后向前一个一个的查找。查找到传入的索引位置结束。
二、List集合
1.List接口中的常用方法
方法名
说明
add(int inde,E e)向指定索引处添加元素
get(int index)获取指定索引元素
set(int inde,E e)修改指定索引元素
remove(int index)删除指定索引元素
List三大特点
有序集合,存储元素和取出元素是一直的
有索引,包含了一些带索引的方法
允许存储重复元素
2.ArrayList集合
方法名
说明
addFirst(E e)将指定元素插入列表的开头
addLast(E e)将指定元素添加到此列表的结尾,等效于add()
push(E e)将元素推入此列表所表示的堆栈,等效于addFirst()
getFirst获取列表的第一个元素
getLast获取列表的最后一个元素
removeFirst移除此列表的第一个元素
removeLast移除此列表的最后一个元素
LinkedList特点
底层是一个链表结构:查询慢,增删快
里面包含了大量操作首尾元素的方法
注意:LinkedList集合特有的方法,不能使用多态
3.List集合实现类的区别
ArryList和LinkedList有什么区别
相同点:都是单列集合
不同点:
ArrrayList底层是数组实现。查询快,增删慢
LinkedList底层是链表实现。查询慢,增删快
ArrarList、LinkedList和Vector有什么区别
相同点:ArrayList和Vector底层都是数组实现的
不同点:
ArrarList和LinkedL都是现成不安全的。速度快、数据不看全。JDK1.2版本出现
Vectour是线程安全的。速度慢。数据安全!JDK1.0版本出现
Set接口的特点
不允许存储重复的元素
没有索引,没有带索引的方法,也不能使用普通的for循环遍历java.uitl.HashSet集合 implements Set接口
HashSet特点:
不允许存储重复的元素
没有索引,没有带索引的方法,也不能使用for循环
是一个无无序的集合,存储元素和取出的元素的顺序可能不一致
底层是一个哈希表结构(查询速度非常的快)
没有排序的功能
使用迭代器、增强for进行遍历
哈希值
是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得到的地址,不是数据实际存储的地址值)在Object类有一个方法,可以获取对象的哈希值——int hashCode()返回该对象的哈希值
hashCode()方法的源码:
public native int hashCode();
native:代表方法调用的是本地操作系统的方法
Set集合保证元素唯一性原理
根据元素的哈希值来确定该元素所保存的位置
如果哈希值不同,直接存储
如果哈希值相同,继续比较equals()方法
true:不存储
false:以桶机构存储(如果挂载的元素超过8个,自动转为红黑树结构)
字符串中"通话"与"重地"的哈希值相同
HLinkedHashSet集合
可以保证元素的存储顺序
可变参数
JDK1.5之后出现的新特性
使用前提
当方法的参数列表数据类型已经确定,但是参数的个数不确定。就可以使用可变参数
使用格式:定义方法时使用
修饰符 返回值类型 方法名(数据类型...变量名){}
可变参数的原理
可变参数底层是一个数组,根据句传递参数个数不同,会粗昂见不同长度的数组,来储存这些参数
传递的参数个数,可以是0个(不传递)。1,2.。。。多个
注意事项:
一个方法的参数列表只能有一个可变参数
如果方法的参数有多个,那么可变参数必须下载参数列表的末尾
可变参数的特殊写法:
pubulic static void 变量名(Object...obj){}
变量名(Object...obj)——不用定义数据类型,任意类型的参数都可以存储
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2