【安博培训技术】Java3 集合、泛型 20130919

来源:互联网 发布:伊朗女孩 知乎 编辑:程序博客网 时间:2024/06/01 09:20
集合、泛型 


教学目标
了解集合框架的接口以及实现类。
掌握ArrayList、Vector以及HashMap等常见集合实现类的用法。
了解如何利用泛型存取数据。


集合框架定义
   所谓框架就是一个类库的集合。
   集合框架就是一个用来表示和操作集合的统一的架构,包含了实现集合的类与接口。
   
Collection 接口 1-1
  Collection对象是将多个元素组成一个单元的对象
集合用于存储、检索和操纵数据
集合框架是用于表示和操纵集合的统一体系结构


Collection 接口 1-2
集合框架包含三个组件
接口 是表示集合的抽象数据类型
算法 是对实现接口的对象执行计算的方法
实现 是接口的实际实现


集合框架的优点
提供有用的数据结构和算法,从而减少编程工作
提高了程序速度和质量,因为它提供了高性能的数据结构和算法
允许不同 API 之间的互操作,API之间可以来回传递集合
可以方便地扩展或改写集合

集合框架中的接口
Collection  SetSortedSet
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);
                    }
           }   
原创粉丝点击