集合、泛型
教学目标
了解集合框架的接口以及实现类。
掌握ArrayList、Vector以及HashMap等常见集合实现类的用法。
了解如何利用泛型存取数据。
集合框架定义
所谓框架就是一个类库的集合。
集合框架就是一个用来表示和操作集合的统一的架构,包含了实现集合的类与接口。
Collection 接口 1-1
Collection对象是将多个元素组成一个单元的对象
集合用于存储、检索和操纵数据
集合框架是用于表示和操纵集合的统一体系结构
Collection 接口 1-2
集合框架包含三个组件
接口 是表示集合的抽象数据类型
算法 是对实现接口的对象执行计算的方法
实现 是接口的实际实现
集合框架的优点
提供有用的数据结构和算法,从而减少编程工作
提高了程序速度和质量,因为它提供了高性能的数据结构和算法
允许不同 API 之间的互操作,API之间可以来回传递集合
可以方便地扩展或改写集合
集合框架中的接口
Collection Set SortedSet
List
Map SortedMap
集合框架中的实现类
Set List Map的区别?
ArrayList与Vector的区别
ArrayList与Vector的区别
1.同步性:Vector是同步的,并且是线程安全的。ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的 。 ArrayList执行的效率比Vector要高。
2.数据增长:增加元素的时候,若元素的数目超出了数组长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势。
ArrayList 2-1
ArrayList 对象是长度可变的对象引用数组,类似于动态数组
继承 AbstractList 并实现 List 接口
随着元素的添加,元素的数目会增加,列表也会随着扩展
访问和遍历对象时,它提供更好的性能
ArrayList 2-2
ArrayList 类的构造方法包括:
构造方法 说明
ArrayList() 创建一个空 Arraylist
ArrayList(Collection c) 根据给定集合的元素创建数组列表
ArrayList(int size) 使用给定大小创建一个数组列表。向数组列表添加元素时,此大小自动增加
示例
import java.util.ArrayList;
class A{
int m=0;
A(int m ){ this.m=m;}
int getM(){return m;}
}
public class Test{
public static void main(String[] s) throws Exception{
ArrayList listAll=new ArrayList();
int tmp=0;
A a=null;
for(int i=0; i<4; i++){
tmp=(int)(Math.random()*100);
a=new A(tmp);
listAll.add(a);
}
for(int i=0; i<listAll.size(); i++){
a=(A)listAll.get(i);
System.out.println(a.getM());
}
}
}
Vector 类 3-1
Vector 类
它具有类似数组的数据结构,而且是动态的
可以存放一定数量的元素
容量可以递增
Vector 类 3-2
构造方法 说明
Vector() 创建一个空 Vector
Vector(int initialCap) 创建一个空 Vector ,其初始大小由 initialCap 指定,容量增量 为 0
Vector (int initialCap, int inc) 创建一个空 Vector ,初始容量由 initialCap 指定,容量增量由 inc 指定
Vector (Collection c) 创建一个包含给定集合元素的新Vector ,元素顺序为集合迭代器返回的顺序
示例
import java.util.Vector;
class A{
int m=0;
A(int m ){ this.m=m;}
int getM(){return m;}
}
public class Test{
public static void main(String[] s) throws Exception{
Vector vecAll=new Vector();
int tmp=0;
A a=null;
for(int i=0; i<4; i++){
tmp=(int)(Math.random()*100);
a=new A(tmp);
vecAll.add(a);
}
for(int i=0; i<vecAll.size(); i++){
a=(A)vecAll.get(i);
System.out.println(a.getM());
}
}
}
HashMap 4-1
实现了 Map 接口
用于存储键/值映射关系
不能保证其元素的存储顺序
HashMap 4-2
此类的构造方法包括:
构造方法 说明
HashMap() 创建一个具有默认容量和负载系数的空映射
HashMap(int size) 创建一个具有指定大小的容量和默认负载系数的空映射
HashMap(int size, float load) 创建一个具有指定的容量和指定的负载系数的空映射
HashMap (Map map) 创建一个具有指定 map 映射的散列映射
它在存放键/值时允许值为null 值
示例
import java.util.HashMap;
class A{
int m=0;
A(int m ){ this.m=m;}
int getM(){return m;}
}
public class Test{
public static void main(String[] s) throws Exception{
HashMap mapAll=new HashMap();
int tmp=0;
A a=null;
for(int i=0; i<4; i++){
tmp=(int)(Math.random()*100);
a=new A(tmp);
mapAll.put("00"+i,a);
}
for(int i=0; i<mapAll.size(); i++){
a=(A)mapAll.get("00"+i);
System.out.println(a.getM());
}
}
}
获取HashMap的keys
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Test{
public static void main(String[] s) throws Exception{
HashMap mapAll=new HashMap();
int tmp=0;
A a=null;
for(int i=0; i<4; i++){
tmp=(int)(Math.random()*100);
a=new A(tmp);
mapAll.put("00"+i,a);
}
Set set=mapAll.keySet();
Iterator iter=set.iterator();
Object key=null;
while(iter.hasNext()){
key = iter.next();
a = (A)mapAll.get(key);
System.out.println(a.getM());
}
}
}
泛型的定义
泛型接口和类的定义
泛型方法的定义
泛型接口和类的定义
泛型接口(或类)就是指带有参数化类型的接口(或类):
public interface Iterator<E>{
E next();
boolean hasNext();
void remove();
}
泛型接口和类的定义(绪)
参数化类型可以被沿用作父接口(或父类)的参数化类型:
public interface Iterable<T>{
Iterator<T> iterator();
}
public interface Collection<E> extends Iterable<E>{
boolean add(E o);
......
}
泛型接口和类的定义(绪)
泛型接口(类)中可以带有多个参数化类型:
public interface Map<K,V>{
V get(Object key);
......
}
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>,cloneable,Serialize{
......
}
泛型接口和类的定义(绪)
定义泛型接口或类时,其中的参数化类型可以带有限制条件:
class MyList<E extends Number>{
......
}
泛型方法的定义
泛型方法是指带有参数化类型的方法:
public static<T> void fromArrayToCollection(
T[] a,Collection<T> c)
{
for()
{
c.add(o);
}
}
教学目标
了解集合框架的接口以及实现类。
掌握ArrayList、Vector以及HashMap等常见集合实现类的用法。
了解如何利用泛型存取数据。
集合框架定义
所谓框架就是一个类库的集合。
集合框架就是一个用来表示和操作集合的统一的架构,包含了实现集合的类与接口。
Collection 接口 1-1
Collection对象是将多个元素组成一个单元的对象
集合用于存储、检索和操纵数据
集合框架是用于表示和操纵集合的统一体系结构
Collection 接口 1-2
集合框架包含三个组件
接口 是表示集合的抽象数据类型
算法 是对实现接口的对象执行计算的方法
实现 是接口的实际实现
集合框架的优点
提供有用的数据结构和算法,从而减少编程工作
提高了程序速度和质量,因为它提供了高性能的数据结构和算法
允许不同 API 之间的互操作,API之间可以来回传递集合
可以方便地扩展或改写集合
集合框架中的接口
Collection Set SortedSet
List
Map SortedMap
集合框架中的实现类
Set List Map的区别?
ArrayList与Vector的区别
ArrayList与Vector的区别
1.同步性:Vector是同步的,并且是线程安全的。ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的 。 ArrayList执行的效率比Vector要高。
2.数据增长:增加元素的时候,若元素的数目超出了数组长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势。
ArrayList 2-1
ArrayList 对象是长度可变的对象引用数组,类似于动态数组
继承 AbstractList 并实现 List 接口
随着元素的添加,元素的数目会增加,列表也会随着扩展
访问和遍历对象时,它提供更好的性能
ArrayList 2-2
ArrayList 类的构造方法包括:
构造方法 说明
ArrayList() 创建一个空 Arraylist
ArrayList(Collection c) 根据给定集合的元素创建数组列表
ArrayList(int size) 使用给定大小创建一个数组列表。向数组列表添加元素时,此大小自动增加
示例
import java.util.ArrayList;
class A{
int m=0;
A(int m ){ this.m=m;}
int getM(){return m;}
}
public class Test{
public static void main(String[] s) throws Exception{
ArrayList listAll=new ArrayList();
int tmp=0;
A a=null;
for(int i=0; i<4; i++){
tmp=(int)(Math.random()*100);
a=new A(tmp);
listAll.add(a);
}
for(int i=0; i<listAll.size(); i++){
a=(A)listAll.get(i);
System.out.println(a.getM());
}
}
}
Vector 类 3-1
Vector 类
它具有类似数组的数据结构,而且是动态的
可以存放一定数量的元素
容量可以递增
Vector 类 3-2
构造方法 说明
Vector() 创建一个空 Vector
Vector(int initialCap) 创建一个空 Vector ,其初始大小由 initialCap 指定,容量增量 为 0
Vector (int initialCap, int inc) 创建一个空 Vector ,初始容量由 initialCap 指定,容量增量由 inc 指定
Vector (Collection c) 创建一个包含给定集合元素的新Vector ,元素顺序为集合迭代器返回的顺序
示例
import java.util.Vector;
class A{
int m=0;
A(int m ){ this.m=m;}
int getM(){return m;}
}
public class Test{
public static void main(String[] s) throws Exception{
Vector vecAll=new Vector();
int tmp=0;
A a=null;
for(int i=0; i<4; i++){
tmp=(int)(Math.random()*100);
a=new A(tmp);
vecAll.add(a);
}
for(int i=0; i<vecAll.size(); i++){
a=(A)vecAll.get(i);
System.out.println(a.getM());
}
}
}
HashMap 4-1
实现了 Map 接口
用于存储键/值映射关系
不能保证其元素的存储顺序
HashMap 4-2
此类的构造方法包括:
构造方法 说明
HashMap() 创建一个具有默认容量和负载系数的空映射
HashMap(int size) 创建一个具有指定大小的容量和默认负载系数的空映射
HashMap(int size, float load) 创建一个具有指定的容量和指定的负载系数的空映射
HashMap (Map map) 创建一个具有指定 map 映射的散列映射
它在存放键/值时允许值为null 值
示例
import java.util.HashMap;
class A{
int m=0;
A(int m ){ this.m=m;}
int getM(){return m;}
}
public class Test{
public static void main(String[] s) throws Exception{
HashMap mapAll=new HashMap();
int tmp=0;
A a=null;
for(int i=0; i<4; i++){
tmp=(int)(Math.random()*100);
a=new A(tmp);
mapAll.put("00"+i,a);
}
for(int i=0; i<mapAll.size(); i++){
a=(A)mapAll.get("00"+i);
System.out.println(a.getM());
}
}
}
获取HashMap的keys
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Test{
public static void main(String[] s) throws Exception{
HashMap mapAll=new HashMap();
int tmp=0;
A a=null;
for(int i=0; i<4; i++){
tmp=(int)(Math.random()*100);
a=new A(tmp);
mapAll.put("00"+i,a);
}
Set set=mapAll.keySet();
Iterator iter=set.iterator();
Object key=null;
while(iter.hasNext()){
key = iter.next();
a = (A)mapAll.get(key);
System.out.println(a.getM());
}
}
}
泛型的定义
泛型接口和类的定义
泛型方法的定义
泛型接口和类的定义
泛型接口(或类)就是指带有参数化类型的接口(或类):
public interface Iterator<E>{
E next();
boolean hasNext();
void remove();
}
泛型接口和类的定义(绪)
参数化类型可以被沿用作父接口(或父类)的参数化类型:
public interface Iterable<T>{
Iterator<T> iterator();
}
public interface Collection<E> extends Iterable<E>{
boolean add(E o);
......
}
泛型接口和类的定义(绪)
泛型接口(类)中可以带有多个参数化类型:
public interface Map<K,V>{
V get(Object key);
......
}
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>,cloneable,Serialize{
......
}
泛型接口和类的定义(绪)
定义泛型接口或类时,其中的参数化类型可以带有限制条件:
class MyList<E extends Number>{
......
}
泛型方法的定义
泛型方法是指带有参数化类型的方法:
public static<T> void fromArrayToCollection(
T[] a,Collection<T> c)
{
for()
{
c.add(o);
}
}