涨薪机密——新潮流新技术、新框架,资源以后不定期更新,
一、Collection集合
(1)集合的由来
我们学习的是面向对象的语言,而面向对象的语言常见的操作就是操作对象。 为了方便我们对多个对象进行操作,我们可以使用对象数组来进行。 但是对象数组的长度是固定的,不适应变化的需求,所以,java就提供了集合供我们来使用。
(2)集合的特点
A:长度可变
B:只能存储引用类型
C:可以存储多种引用类型
(3)数组和集合的区别
A:数组的长度固定;数组可以存储基本类型,也可以存储引用类型;数组存储的是同一种数据类型的元素
B:集合的长度可变;集合只能存储引用类型;集合可以存储多种引用类型。
(4)集合的继承体系结构
多种集合类的数据结构不同,但是功能相似,所以,我们不断的向上抽取,就形成了集合的继承体系结构
Collection
|--List
|--ArrayList
|--Vector
|--LinkedList
|--Set
|--HashSet
|--TreeSet
面对这样的继承体系结构,我们该学习谁,使用谁呢?
学习:顶层,因为顶层定义的是共性功能。
使用:底层,因为底层才是具体的实现类,并且具有最多的功能。
(5)Collection的功能概述:
A:添加功能
boolean add(Object obj):往集合中添加一个元素
boolean addAll(Collection c):往集合中添加多个元素。
B:获取功能
Iterator iterator():迭代器
int size():集合的元素个数,长度
C:删除功能
void clear():清空集合的所有元素
boolean remove(Object obj):从集合中移除一个元素
boolean removeAll(Collection c):从集合中移除多个元素
D:判断功能
boolean contains(Object obj):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的多个元素
boolean isEmpty():判断集合是否为空
E:交集元素
boolean retainAll(Collection c)
F:转数组
Object[] toArray():把集合转成对象数组
(6)迭代器的使用
A:迭代器的使用
依赖于集合存在,本身有两个方法
a:hasNext()
b:next()
B:集合的使用步骤
a:创建集合对象
b:创建元素对象
c:把元素添加到集合中
d:遍历集合
通过集合对象获取迭代器对象
通过迭代器对象的hasNext()方法判断是否有元素
通过迭代器对象的next()方法获取元素,并移动到下一个位置
C:迭代器的原理
定义为了接口,由具体的集合类通过内部类的方式提供实现。
(7)案例:
A:Collection存储字符串并遍历
- Collection c = new ArrayList();
- c.add("hello");
- c.add("world");
- c.add("java");
- Iterator it = c.iterator();
- while(it.hasNext()) {
- String s = (String) it.next();
- System.out.println(s);
- }
复制代码
B:Collection存储自定义对象并遍历- public class CollectionTest {
- public static void main(String[] args) {
- // 创建集合对象
- Collection c = new ArrayList();</P>
- // 创建元素对象
- Student s1 = new Student("林黛玉", 18);
- Student s2 = new Student("秦可卿", 20);
- Student s3 = new Student("王熙凤", 22);</P>
- // 把学生对象添加到集合
- c.add(s1);
- c.add(s2);
- c.add(s3);
- // c.add(new Student("贾宝玉", 20));
- // 遍历集合
- Object[] objs = c.toArray();
- for (int x = 0; x < objs.length; x++) {
- Student s = (Student) objs[x];
- System.out.println(s.getName() + "---" + s.getAge());
- }
- }
复制代码 二、List集合
(1)List集合的特点 元素有序(存储顺序和取出顺序一致),可重复。
(2)List集合的特有功能
A:add(int index,Object obj)
B:remove(int index)
C:get(int index)
D:set(int index,Object obj)
E:listIterator()
(3)List集合的特有遍历功能
通过size()和get()方法结合即可
(4)ListIterator的概述和使用
A:ListIterator是Iterator的子接口
B:ListIterator可以逆向遍历,但是意义不大。
因为它需要先正向遍历。
C:并发修改异常产生的原因和解决方案
a:原因
用迭代器遍历集合的时候,用集合去修改了集合的元素。
b:解决方案
用普通for遍历,并用集合去添加元素
用列表迭代器遍历,并用列表迭代器去添加元素
(5)案例:
A:List存储字符串并遍历
- List list = new ArrayList();
- list.add("hello");
- list.add("world");
- list.add("java");
- Iterator it = list.iterator();
- while(it.hasNext()) {
- String s = (String) it.next();
- System.out.println(s);
- }
- for(int x=0; x<list.size(); x++) {
- String s = (String) list.get(x);
- System.out.println(s);
- }
复制代码
B:List存储自定义对象并遍历
自定义对象:Student(name,age)
- public class ListDemo {
- public static void main(String[] args) {
- // 创建集合对象
- List list = new ArrayList();
- // 创建学生对象
- Student s1 = new Student("潘金莲", 18);
- Student s2 = new Student("孙二娘", 19);
- Student s3 = new Student("扈三娘", 20);
- Student s4 = new Student("李师师", 21);
- // 把元素添加到集合
- list.add(s1);
- list.add(s2);
- list.add(s3);
- list.add(s4);
- // 遍历集合
- Iterator it = list.iterator();
- while (it.hasNext()) {
- Student s = (Student) it.next();
- System.out.println(s.getName() + "---" + s.getAge());
- }
- }
- }
复制代码 【穿插知识】数据结构
(1)面试题:常见的数据结构有哪些?以及每种数据结构的优缺点?
(2)数据结构
A:栈
先进后出
B:队列
先进先出
C:数组
查询快,增删慢
D:链表
查询慢,增删快
(6)List的三个实现类
1.List的三个实现类特点
A:ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
B:Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低
C:LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
2.你如何选择哪个儿子进行使用?
看情况。
要安全吗?
要:Vector(其实也不用这个有更好的方式,后面讲)
不要:ArrayList和LinkedList
查询多:ArrayList
增删多:LinkedList
如果你什么都不知道,就用ArrayList。
3.ArrayList
A:存储字符串并遍历
B:存储自定义对象并遍历
4.Vector
A:特有功能
a:addElement(object obj) -- add()
b:elementAt(int index) -- get()
c:elements() -- iterator()
B:存储字符串并遍历
C:存储自定义对象并遍历
5.LinkedList
A:特有功能
a:addFirst(),addLast()
b:removeFirst(),removeLast()
c:getFirst(),getLast()
B:存储字符串并遍历
C:存储自定义对象并遍历
6.案例:
A:去除ArrayList集合中重复字符串
B:去除ArrayList集合中重复自定义对象
contains()方法的底层源码是equals()
C:用LinkedList模拟栈数据结构的集合,并测试
三、泛型
(1)泛型:是一种把明确数据类型的工作推迟到创建对象或者调用方法的时候采取明确的特殊的数据类型。
(2)格式:
<数据类型>
(3)好处:
A:提高了程序的安全性
B:把运行时期异常提前到了编译期
C:避免了强制类型转换
(4)在哪些地方使用泛型?
看API即可,如果类,抽象类,接口后面跟有<...>说明这里需要使用
(5)泛型的由来
A:泛型的由来
B:泛型类
C:泛型方法
D:泛型接口
E:泛型高级
(6)案例:
把前面的集合案例用泛型改进。
底层数据结构是数组,查询快,增删慢
线程安全,效率低
部落与荣耀:拥有一个足以让你自豪的薪资——Android76—83期连续霸(8)气(期)平均薪资超11K!
|