corejava day05
- ArrayList类、HashMap类、迭代器
2011/07/28
==============================
1.线性表
1)什么是线性表?
线性表是一种元素之间有先后次序的集合,
元素的次序由序号(index)表示,在软件开发中使用广泛,如商品列表。
数组和线性表的区别:
a.数组的大小是固定的,而线性表的大小是不固定的
b.数组只能存放相同类型的元素,而线性表存储元素的类型可以不同
2)线性表的功能
a. 集合属性:int size()
boolean isEmpty()
b. 添加元素 void add(Object obj)
void add(int index,Object obj)
c. 删除元素 void remove(int index)
void clear()
d. 修改元素 void set(int index,Object obj)
e. 查询: Object get(int index)
boolean contains(Object obj)
int indexOf(Object obj)
int lastIndexOf(Object obj)
f. 转换为数组:Object[] toArray()
编写自定义线性表接口MyList和实现类MyArrayList,
实现类MyArrayList=线性数据Object[]+操作实现。
3) JDK中线性表接口:java.util.List
数组转换为线性表:List Arrays.asList(Object[] obj)
4) JDK中线性表的实现类:
a.ArrayList: 数组列表,数组实现的线性表,
非线程安全,Java 1.2以后提供,
数组容量采用50%的方式增长,性能较Vector快
b.Vector:向量,数组实现的线性表,线程安全,
数组容量采用成倍的方式增长。
c.LinkedList:链表,采用双向循环链表
实现的线性表。
使用数组实现的线性表,
在元素较多时不适合对元素进行插入和删除操作
,此时应该选择LinkedList
2.散列表
1)什么是散列表?
散列表通过键值对(key:value)存储元素的数据,
key不可以重复, Value可以重复, 无序存储。
实际应用:购物车
2)JDK中散列表的接口:java.util.Map
Map的方法:
属性: size(), isEmpty()
添加元素: put(key, value)
删除元素: remove(key), clear()
更新元素: put(key, value)
查询元素: get(key),
containsKey(key),
containsValue(value)
全部查询: keySet() - 返回key的集合
values() - 返回value的集合
entrySet() - 返回Set集合,集合的元素是key/value
3)JDK中散列表的实现类
a.HashMap类
构造方法:
HashMap() 默认, 初始容量 (16)
加载因子 (0.75)
加载因子是指元素个数和容量之间的一个比率(<1),
当这个比率接近加载因子时,散列表就要扩充容量
HashMap(int initialCapacity) 指定初始容量和默认加载因子 (0.75)
HashMap(int initialCapacity,
float loadFactor) 指定初始容量和加载因子
HashMap(Map map) 创建副本
b.Hashtable类
HashMap与 Hashtable的比较:
HashMap 新, 非线程安全, 性能好
Hashtable 旧 (1.2以前) ,
线程安全, 性能稍差
3.迭代器
1)什么是迭代器: 对集合进行遍历操作,如: 逐一播放歌曲, 发牌操作等.
2)java 接口 java.util.Iterator(迭代器) 用于遍历集合
Iterator接口的方法:
boolean hasNext();//检查是否有下一个元素
Object next(); //返回下一个元素
void remove(); //删除当前元素
a. Iterator 描述了一个顺序结构,
并且有一个游标 概念, 游标默认在第一个元素之前.
b. 调用方法 hasNext()
可以检查游标是否有下一个元素.
c. 使用next() 方法移动游标,
并且返回当前游标指向的元素.
这两个方法经常与while循环组成模式化 结构,
用来遍历集合内容. 是常见的标准结构.
d.凡是对集合的遍历都应采用Iterator接口实现,
编程中十分常见.
e. 集合在迭代期间不能调用
集合的更新方法 add remove set 等
f. 如果需要迭代时候删除集合内容,
可以调用迭代器的 删除方法 remove()来 删除当前元素.
作业
1 复习实现全部课堂案例代码
2 编写自定义线性表接口MyList和实现类MyArrayList
3.在课堂贪吃蛇代码的基础上,增加如下功能完成贪吃蛇游戏:
a. 在类Worm的构造方法中随机产生6个节点Node对象,6个节点连在一起形成蛇身
b. 提供移动蛇头的方法,蛇头碰到WormPanel面板的边界游戏结束。
贪吃蛇的初始显示如下:
--------------------------------
| |
| |
| # |
| # |
| ### |
| # |
| # |
| |
--------------------------------
向右移动一步,显示如下:
--------------------------------
| |
| |
| ## |
| # |
| ### |
| # |
| |
| |
--------------------------------
- ArrayList类、HashMap类、迭代器
2011/07/28
==============================
1.线性表
1)什么是线性表?
线性表是一种元素之间有先后次序的集合,
元素的次序由序号(index)表示,在软件开发中使用广泛,如商品列表。
数组和线性表的区别:
a.数组的大小是固定的,而线性表的大小是不固定的
b.数组只能存放相同类型的元素,而线性表存储元素的类型可以不同
2)线性表的功能
a. 集合属性:int size()
boolean isEmpty()
b. 添加元素 void add(Object obj)
void add(int index,Object obj)
c. 删除元素 void remove(int index)
void clear()
d. 修改元素 void set(int index,Object obj)
e. 查询: Object get(int index)
boolean contains(Object obj)
int indexOf(Object obj)
int lastIndexOf(Object obj)
f. 转换为数组:Object[] toArray()
编写自定义线性表接口MyList和实现类MyArrayList,
实现类MyArrayList=线性数据Object[]+操作实现。
3) JDK中线性表接口:java.util.List
数组转换为线性表:List Arrays.asList(Object[] obj)
4) JDK中线性表的实现类:
a.ArrayList: 数组列表,数组实现的线性表,
非线程安全,Java 1.2以后提供,
数组容量采用50%的方式增长,性能较Vector快
b.Vector:向量,数组实现的线性表,线程安全,
数组容量采用成倍的方式增长。
c.LinkedList:链表,采用双向循环链表
实现的线性表。
使用数组实现的线性表,
在元素较多时不适合对元素进行插入和删除操作
,此时应该选择LinkedList
2.散列表
1)什么是散列表?
散列表通过键值对(key:value)存储元素的数据,
key不可以重复, Value可以重复, 无序存储。
实际应用:购物车
2)JDK中散列表的接口:java.util.Map
Map的方法:
属性: size(), isEmpty()
添加元素: put(key, value)
删除元素: remove(key), clear()
更新元素: put(key, value)
查询元素: get(key),
containsKey(key),
containsValue(value)
全部查询: keySet() - 返回key的集合
values() - 返回value的集合
entrySet() - 返回Set集合,集合的元素是key/value
3)JDK中散列表的实现类
a.HashMap类
构造方法:
HashMap() 默认, 初始容量 (16)
加载因子 (0.75)
加载因子是指元素个数和容量之间的一个比率(<1),
当这个比率接近加载因子时,散列表就要扩充容量
HashMap(int initialCapacity) 指定初始容量和默认加载因子 (0.75)
HashMap(int initialCapacity,
float loadFactor) 指定初始容量和加载因子
HashMap(Map map) 创建副本
b.Hashtable类
HashMap与 Hashtable的比较:
HashMap 新, 非线程安全, 性能好
Hashtable 旧 (1.2以前) ,
线程安全, 性能稍差
3.迭代器
1)什么是迭代器: 对集合进行遍历操作,如: 逐一播放歌曲, 发牌操作等.
2)java 接口 java.util.Iterator(迭代器) 用于遍历集合
Iterator接口的方法:
boolean hasNext();//检查是否有下一个元素
Object next(); //返回下一个元素
void remove(); //删除当前元素
a. Iterator 描述了一个顺序结构,
并且有一个游标 概念, 游标默认在第一个元素之前.
b. 调用方法 hasNext()
可以检查游标是否有下一个元素.
c. 使用next() 方法移动游标,
并且返回当前游标指向的元素.
这两个方法经常与while循环组成模式化 结构,
用来遍历集合内容. 是常见的标准结构.
d.凡是对集合的遍历都应采用Iterator接口实现,
编程中十分常见.
e. 集合在迭代期间不能调用
集合的更新方法 add remove set 等
f. 如果需要迭代时候删除集合内容,
可以调用迭代器的 删除方法 remove()来 删除当前元素.
作业
1 复习实现全部课堂案例代码
2 编写自定义线性表接口MyList和实现类MyArrayList
3.在课堂贪吃蛇代码的基础上,增加如下功能完成贪吃蛇游戏:
a. 在类Worm的构造方法中随机产生6个节点Node对象,6个节点连在一起形成蛇身
b. 提供移动蛇头的方法,蛇头碰到WormPanel面板的边界游戏结束。
贪吃蛇的初始显示如下:
--------------------------------
| |
| |
| # |
| # |
| ### |
| # |
| # |
| |
--------------------------------
向右移动一步,显示如下:
--------------------------------
| |
| |
| ## |
| # |
| ### |
| # |
| |
| |
--------------------------------