您的位置:首页 > 编程语言 > Java开发

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

2013-09-21 09:36 387 查看
集合、泛型 

教学目标

了解集合框架的接口以及实现类。

掌握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);

                    }

           }   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: