重温经典-JAVA(5)

数据结构::先进后出。队列:先进先出

数据结构:数组,查询快(数组的地址是连续的,通过数组的首地址可以找到数组,通过数组的索引可以快速查找某一个元素),增删慢(数组的长度是固定的,我们想要增加/删除一个元素,必须创建一个新数组,把源数组的数据复制过来)。

数据结构:链表:查询慢(链表中的地址不是连续的,每次查询元素都必须从头开始),增删快(链表结构,增加/删除一个元素,对链表的整体结构没有影响,所以增删快)。可分为单向链表和双向链表。

红黑树:节点可以是红色或者黑色的,根节点是黑色的,叶子 的节点是黑色的。特点,趋近于平衡树,查询的速度非常的快,查询叶子节点最大次数和最小次数不能超过2倍。

java.util.List 接口继承Collection接口

List接口特点:

1,有序的集合,存储元素和去除元素的顺序是一致的

2,有索引,包含了一些带索引的方法

3,允许存储重复的元素

其中带索引的方法:add,get,remove,set

创建List集合:如多态:List <String> list=new ArrayList<>();

List子类ArraList(此实现不是同步),集合存储的结构是数组结构。日常开发中常用,但不提倡随意使用。

List子类LinkedList(此实现不是同步),集合存储的结构是链表结构。且是双向链表。常用方法,addFirst,addLast,push,getLast,getFirst,pop,remove等。

List子类Vector(此实现同步——单线程,单线程速度慢)在JDK1.2版本之后被ArrayList取代。

Set接口特点

1,不允许重复元素

2,没有索引,没有带索引的方法,不能使用普通的for循环遍历,可使用迭代和增强for

java.util.HashSet 特点:

1,不允许存储重复的元素。2,没有索引,没有带索引的方法,不能使用普通的for循环遍历,可使用迭代和增强for。3,是一个无序的集合,存储元素和取出元素的顺序可能不一致。4,底层是一个哈希表结构(查询的速度非常的快)。

创建如:Set<Integer>set=new HashSet<>();

哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来的地址,不是数据实际存储的物理地址。在Object类中有一个方法,int hashCode() 获取对象的哈希值)。

hashCode方法可以重写,对象的地址其实就是哈希值的十六进制。

若用hashset存储元素,必须重写hashCode和equals方法(尤其是存储。自定义类型元素)

java.util.LinkedHashSet 底层是一个哈希表(数组+链表/红黑树)+链表:多了一个链表(记录元素的存储顺序),保证元素有序。

可变参数:当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数。格式:修饰符 返回值类型 方法名(数据类型。。。变量名){}

注意事项:1,一个方法的参数列表,只能有一个可变参数。2,如果方法的参数有多个,那么可变参数必须卸载参数列表的末尾。

java.util.Collections是集合工具类。sort 方法,将集合中元素按照默认规则排序。使用前提,被排序的集合里边存储的元素,必须实现Comparable 接口,并重写接口中的方法compareTo定义排序的规则。

Comparable 和 Comparator接口区别:Comparable:强行对实现它的每个类的对象进行整体排序。Comparator 强行对某个对象进行整体排序。

java.util.Map

Map集合特点:

1,Map集合是一个双列集合,一个元素包含两个值(key,value)

2,Map集合中的元素,key和value的数据类型可以相同,可以不同

3,Map集合中的元素,key是不允许重复的value是可以重复的

4,Map集合中的元素,key和value是一一对应的

HashMap集合的特点:

1,HashMap集合底层是哈希表:查询的速度特别的快。JDK1.8之后除了数组和单向链表,也加入了红黑树结构,目的提高查询的速度。

2,HashMap集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致。

LinkedHashMap特点

1,LinkedHashMap集合底层是哈希表+链表(多了一个链表,保证迭代顺序)

2,LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的。

HashMap和LinkedHashMap,由于要保证键的唯一、不重复,需要重写键的hashcode和equals方法。

常用方法,put/get/remove/containsKey。其中,基本类型最好用到包装类,即使返回空值也不会报错。

Map集合有两种遍历的方式(Map集合不能直接使用迭代器或者增强for进行遍历,要转为Set之后就可以使用)

1,通过键找值的方式,即Set<K>keySet(),返回此映射中包含的键的Set视图。

2,使用Entry对象遍历,即Set<Map.Entry<k,v>> entrySet() 返回此映射中包含的映射关系的Set视图。

JDK9的新特性:

List接口,Set接口,Map接口;里边增加了一个静态的方法of,可以给集合一次性添加多个元素。

注意:1,of方法只适用上述接口,不适合接口的实现类如ArrayList,hashSet等。2,of方法的返回值是一个不能改变的集合,集合不能再使用add,put等方法增加元素,会抛出异常。3,Set接口和Map接口在调用of方法时,不能有重复的元素,否则会抛出异常。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值