PS : 前段时间花了大半个月的时间了解前端的一些基本知识,现在转向后端开发。X之前学过java,但是当时在学习d的过程中缺乏实践和整理,现在有一部分知识已经健忘,比如集合、I/O、反射、多线程以及网络编程等。我们知道,学习Web后端得要有扎实的Java基础。所以现在先重新捡起这几个方面的知识,加深印象。
一.Collection
1.集合与数组的区别
集合,集合是java中提供的一种容器,可以用来存储多个数据。
数组的长度是固定的。集合的长度是可变的。而集合中存储的元素必须是引用类型数据
2.Collection 接口
一些集合允许重复的元素,而其他的则不允许。有些是有序和无序的人。JDK没有提供这个接口的任何直接的实现:它提供更具体的子接口像 Set和 List实现。此接口通常用于通过收集和操纵他们最大的共性是理想。
下面是Collection接口下的常用的方法:
PS : Collection下的子接口和子接口的实现类都拥有Collection接口下的方法
3.迭代器
a:java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。我们要取出这些集合中的元素,可通过一种通用的获取方式来完成。
b:Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代
Iterator常用的两个方法:
c:Iterator的并发修改异常
并发修改异常解决办法:在迭代时,不要使用集合的方法操作元素。
那么想要在迭代时对元素操作咋办?通过ListIterator迭代器操作元素是可以的,ListIterator的出现,解决了使用Iterator迭代过程中可能会发生的错误情况。
4. 泛型
至于什么是泛型,我就不说了
1. 泛型的好处
a:将运行时期的ClassCastException,转移到了编译时期变成了编译失败。
b:避免了类型强转的麻烦
2. 泛型的通配
匹配所有的数据类型 " ? "
? extends 父类 限制的是父类, 上限限定, 可以传递Employee,传递他的子类对象
? super 父类 限制的是子类, 下限限定, 可以传递Employee,传递他的父类对象
二、List
一个有序集合(也被称为序列)。此接口的用户在列表中的每个元素都被插入的地方有精确的控制。用户可以通过它们的整数索引(在列表中的位置)访问元素,并在列表中搜索元素。并且可以存储重复的元素
1.List接口 特有常用方法
2.ArrayList和LinkedList
这两个List接口下的实现类就不单独展开了,下面就说说这两个实现类的区别:
ArrayList : 底层数据结构是数组,查询快,增删慢
LinkedList : 底层数据结构是链表,查询慢,增删快。LinkedList提供了大量首尾操作的方法
三、Set
不能存储重复的元素
1. HashSet
HashSet集合,实际上是HashMap.采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法。给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一
规则如下:先判断新元素与集合内已经有的旧元素的HashCode值
a:如果不同,说明是不同元素,添加到集合。
b:如果相同,再判断equals比较结果。返回true则相同元素;返回false则不同元素,添加到集合。
所以,使用HashSet存储自定义类型,如果没有重写该类的hashCode与equals方法,则判断重复时,使用的是地址值,如果想通过内容比较元素是否相同,需要重写该元素类的hashcode与equals方法。
哈希表的存储过程:
2.HashSet和LinkedHashSet区别
HashSet :
a:底层结构是 哈希表结构
b:元素的存与取的顺序不能保证一致
LinkedHashSet
a:底层结构是 哈希表结构 + 链表结构
b:元素的存与取的顺序一致
四、Map
a:Map集合中的元素都是成对出现,成对存储的
b:Map集合中的元素都是以一对键和值的形式组成存在的,称为键值对,理解为夫妻对
c:Map集合中的键不能重复存储,值可以重复。依然通过重写hashCode() 与 equals()方法来保证键的唯一
d:Map集合中的每一个键 对应着一个值
1.Map接口下的常用方法:
2.Entry键值对对象
在Map类设计时,提供了一个嵌套接口:Entry。Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。
Map.Entry<k,v>下的常用两个方法:
3.HashMap和LinkedHashMap
HashMap和LinkedHashMap的区别:
HashMap:
a:底层采用哈希表结构
b:不能保证元素存与取的顺序完全一致
LinkedHashMap:
a:底层采用哈希表+链表结构
b:继承自 HashMap,具有高效性,同时在 HashMap 的基础上,又在内部增加了一个链表,用以存放元素的顺序。
4.Map集合遍历的两种方式
方式1:根据键找值的方式
方式2:根据键值对对象找键和值的方式
注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了
最后,附张集合继承体系的面向对象思想图