对象数组: //掌握
数组既可以存基本类型,也可以存引用类型,
存基本类型存的是 值,存引用类型存的是 地址值。
需求:
新建一个学生类,和测试类,
然后在测试类中,创建一个学生类的对象数组,存3个学生的信息(包括姓名和年龄)
然后遍历,打印学生的信息。
集合: //掌握
集合和数组的区别:
集合:长度可变,只能存引用类型(因为存基本类型的话会自动装箱)
数组:长度固定,可以存基本类型,也可以存引用类型。
存基本类型存的是 值,存引用类型存的是 地址值。
以后我们学习任何体系,都采用“学顶层,用底层”,因为顶层是整个体系的共性内容,而底层才是具体的方法实现。
集合体系://重点掌握
单列集合:
顶层接口:Collection
List体系:有序(元素的存,取的顺序是一致),可重复。
ArrayList:
底层数据结构是 数组。查询快(修改快),增删慢。线程不安全(不同步),效率高。
Vector:
底层数据结构是 数组。查询快(修改快),增删慢。线程安全(同步),效率低。
LinkedList:
底层数据结构是 链表。查询慢(修改慢),增删快。线程不安全(不同步),效率高。
Set体系:无序(元素的存,取的顺序是不一致),唯一。
HashSet:底层数据结构是 哈希算法。
TreeSet:底层数据结构是 二叉树算法。
双列集合:
底层接口:Map
HashMap:底层数据结构是 哈希算法。
TreeMap:底层数据结构是 二叉树算法。
Collection:中的方法:
add() //掌握
remove()
clear()
contains() //掌握
isEmpty(); //掌握
size(); 获取集合的长度 //掌握
public Object[] toArray(); 把集合转成数组
了解:
c1.addAll(c2); //把c2中所有的元素添加到集合 c1中
c1.removeAll(c2); // 在c1中删除 所有 c1和c2的交集元素
c1.contains(c2); //判断c1中是否包含 c2的所有元素
c1.retainAll(c2); //判断c1和c2是否有交集元素, 返回的结果是根据c1是否改变,
//如果c1的元素发生改变,返回true,不发生改变,返回false
迭代器的原理:理解
迭代器是用来对集合进行遍历的,但是我们知道每一种集合内部的数据结构都是不一样的,进而导致他们(集合)存,取元素的方式也是不一样的,如果我们把hasNext()和next()方法都定义到每个集合类中,整个集合体系就会显得比较冗余,所以经过不断的向上抽取,最终抽取出一个Iterator接口,让集合类来实现这个接口就可以了。
List 体系的特有方法://掌握
void add(int index, Object obj); 在指定位置添加元素
Object remove(int index); 删除指定位置的元素,并讲该元素返回
Object get(int index) 根据索引获取元素
Object set(int index,Object obj) 把指定位置的元素用obj替代,并讲修改前的结果返回
注意:
index的范围不能超过 集合的长度,或者会报错:IndexOutOfBoundsException。
remove()进行删除操作的时候,不会自动装箱,也就是说,我们传的整数会直接被识别为:索引。
并发修改异常:ConcurrentModificationException //掌握
产生原因:
通过普通的迭代器遍历集合的时候,又同时往集合中添加元素
解决方案:
通过 ListIterator(列表迭代器)来遍历集合,并且通过 列表迭代器中的add()方法往集合中添加元素。
ListIterator(列表迭代器):
正向遍历:从前往后拿元素(掌握)//掌握
boolean hasNext();
Object next();
逆向遍历:从后往前拿元素(了解)
boolean hasPrevious();
Object previous();
注意:进行逆向遍历之前,必须先对集合进行正向遍历,否则打印结果是空。
"a","b","c","d",
List 的儿子: //理解
Vector(现在已经基本上不用它了,被ArrayList替代了)
addElement(); //添加元素
elementAt(); //根据索引获取元素
public Enumeration elements(); //获取集合中所有的元素
Enumeration中的两个方法:
hasMoreElements(); 判断是否有下一个元素,根hasNext()作用一样。
nextElement(); 获取下一个元素,跟现在的 next()方法作用一样。
面试题:如何获取字符串,数组,集合的长度 //掌握
字符串:length()
数组:length
集合的长度:size()
数据结构之 数组 和 链表: //掌握
数组:查询快,修改快,增删慢。
里边的每个元素都有编号(索引),并且编号是从0开始的。
链表:查询慢,修改慢,增删快。
List的三个儿子,我们怎么选择什么时候用谁? //掌握
查询多,用ArrayList,
增删多,用LinkedList。
如果是都多,或者需求不明确,用ArrayList。
集合的遍历方式://掌握
1、转数组遍历。
2、通过迭代器遍历。
A:通过集合对象获取其对应的 迭代器对象。
iterator();
B:判断集合(迭代器)中是否有元素,
hasNext()
C:有就获取。
next();
List集合的独有遍历方式: //掌握
1、get()方法和size()方法结合使用。
2、可以通过列表迭代器来遍历。
/*
遍历方式
优先掌握 普通迭代器, 列表迭代器,
之后是 get()方法和size()方法结合使用,
最后练习下 转数组遍历 方式。
*/
|
|