J2EE集合例子

 

集合

Java 2中最主要的特性之一是对集合的支持,提供了对各种数据结构的封装实现,极大方便了编程,使Java成为更加成熟的编程的平台。

一个集合是代表一组对象的一个对象,集合中的这一组对象的每一个称为它的元素。集合主要用来处理各种类型的对象的聚集,每一个对象都具有一定的数据类型。集合保留了对Object的引用,因此任何数据类型的对象都可以存放在集合中。

Java2数据结构主要提供了4种接口:Collection,List,Set和Map接口,用于描述不同类型的数据结构类型。

Collection中的对象的存放没有一定的顺序,并且允许重复,可以存在几个相同的对象。

List是个有序的对象聚集,对象存放按照一定的顺序存放,同时允许重复。

Set也是对象的无序聚集,但是不允许重复,即相同的对象只能在集合中出现一次。

Map是一种“键/值”对的集合,每个键(key)都映射到一个值(value)。

 

对于每种接口,根据存放的数据结构有不同具体的版本,如图所示是Java2提供的对数据结构的支持的集合关系图(其中用虚线框代表接口,实线框代表类)。

 

Java2提供的对数据结构的支持的集合关系图

 

图中的Utilitys是指这两个类包含着操作集合的许多工具。

接口Comparator是用于比较方法的集合,多用于工具类中。

 

1.Collection接口

Conection接口是任何对象组的集合,其中对象存放没有一定的顺序,并且允许重复,可以存在几个相同的对象。Colletion接口的定义如下:

public interface Collection

{

public int size();

public boolean isEmpty();

public boolean contains(Object o);  //判断集合是否包含对象o

public Interator iterator();

  //产生一个循环反复器,其中包含了该collection对象中所有的元素。

public Obj ect[] toArray();  //返回一个包含所有元素的对象数组

public Object[] toArray(Object a[])  //把所有的元素放入a[]数组中

public boolean add(Object o);//向集合加入对象,成功时返回true

public boolean containsAll(Cellection o); //判断o是否为子集

public boolean remove(Object o) ;  //从集合加中删除对象o,成功时返回true

public boolean addAll(Collection o) ;  //向集合加入集合o

public boolean retainAll(Collection o);   //从集合加中保留子集合o

public boolean removeAll(Collection o);  //清空指定集合o

public void clear();  //清空当前集合

public boolean equals(Object o) ;   //比较两个对象是否相同

public int hashCode();  //获取集合的hashcode

 

Collection操作包括:增加元素,删除元素,检查内容和使用元素。

 

 

[例1]Collection接口的使用:

package com;

import java.util.*;

public class CollectionDemo

{

    public static void main(String[] args) 

    {

        Collection  Months;       //声明Months是无序,可重复的集合

        String strMonths[]={"一月","四月","五月","六月","二月","三月","三月","七月","八月","九月","十月","十二月","十一月"};   //赋初值,2个"三月"

        int n;

        n=strMonths.length;         //获得月份的数,既数组长度

        Months=new ArrayList();    //创建ArrayList集合对象Months,Collection是接口,只能用它的某实现类创建对象,Collection是无序的

        for(int i=0;i<n;i++)

               Months.add(strMonths[i]);  //将数组元素逐个加入集合中

                                          // Months是无序的,不能按序一一输出

        Object s[]=Months.toArray();     //为了输出集合中的内容,将集合导入数组s中

        for(int i=0;i<s.length;i++)      //输出s

        System.out.println(s[i].toString());

    }

}

 

输出结果如下:

一月

四月

五月

六月

二月

三月

三月

七月

八月

九月

十月

十二月

十一月

 

2.List接口

 List接口是从Collection接口中派生出来的,List是个有序的对象聚集,对象按照一定的顺序存放,同时允许重复。List接口的定义如下:

public interface List extends Collection

{

int size();

boolean isEmpty();

boolean contains(Object o);

Object[] toArray();

Object[] toArray()(Object a[]);

boolean add(0bject o);

boolean  remove(Object o);

boolean containsAll(Collection c);

boolean addAll(Collection c);

boolean addAll(int index,Collection c);

boolean removeAll(Collection c);

boolean  retainAll(Collection  c);

void clear();

boolean equals(0bject o);

int  hashCode();

0bject get(int index);   //因为是有序的,可以访问它的第i个元素

0bject  set(int index,0bject element);

void  add(int index,0bj ect  element);

0bject remove(int index);

int indexof(0bject o);

int  lastIndexof(0bj ect  o);

ListIterator listIterator();

ListIterator listIterator(int index);

List subList(int fromIndex,int toIndex);

}

List接口有两个实现集合类:  ArrayList和LinkedList类。

ArryList(数组表)的功能类似于Vector(矢量),用于存放数组维护的集合。维护和操作表达式集合时可以使用 ArrayList,但是要经常在表中间进行插入或者删除操作时,ArrayList就不如LinkedList方便了。

LinkedList(链表)是双向链表,每个节点引用上一个节点和下一个节点。

 

[例2]使用 List接口,对月份进行了逆序输出:

package com;

 

import java.util.*;

public class ListDemo

{

    public static void main(String[] args) 

    {

        List months;

        String strMonths[]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};

        int n;

        n=strMonths.length;      //获得月份的数,既数组长度

        months=new ArrayList();  //创建ArrayList集合对象,集合是List型的

        for(int i=0;i<n;i++)

               months.add(strMonths[i]);    //将数组元素逐个加入集合months中

        for(int i=months.size()-1;i>=0;i--)   //集合是有序的,可以直接利用它的有序的下标(索引)输出集合的元素

        System.out.println(months.get(i));    // 通过get(i)访问到了第i个元素

    }

}

运行结果如下:

十二月

十一月

十月

九月

八月

七月

六月

五月

四月

三月

二月

一月

 

3.Set接口

Set接口是从Collection接口中派生出来的,是没有重复元素的集合,其接口并没有加入新的功能,只是限制不能有重复的元素存在。

Set接口有两个实现类:HashSet和TreeSet类。推荐使用HashSet类,因为它是基于散列表的集合;TreeSet是基于平衡树数据结构的,如果顺序很重要的话,则可以选择TreeSet。

 

4.Map接口

  Map接口用于保存关键字(Key)和数值(Value)的集合,不允许重复,集合中的每个元素加入时都必须提供(键,值)对。

Map接口的定义如下:

public interface Map

{

int size();                    //求Map集合的大小,返回元素个数

boolean isEmpty();                     //判断集合是否为空,为空返回true

boolean containsKey(Object key);       //判断集合中有这个key吗?有则返回true

boolean containsValue(Object value);   //判断集合中有这个value吗?有则返回true

Object get(Object key);                //返回这个key所对应的value

Object put(Object key, Object value);  //向集合中加入“键----值”对元素

Object remove(Object key);             //从集合中删除这个key的键值对

Object removeAll(Set keySet); //从集合中删除所有的键子集,效果为删除所有的“键--值”对

void putAll(Map t);             //将Map集合t并入当前集合

void clear();                    //清空集合

public Set keySet();             //返回集合中所有的key

public Collection values();      //返回集合中所有的value

public Set entrySet();

boolean equals(Object o);

int hashCode();

public interface Entry

{

Object getKey();

Object getValue();

Object setValue(Object value);

boolean equals(Object o);

inthashCode();

}

}

 

Map接口有三个实现集合类:HashMap,WeakHashMap和TreeMap类。

HashMap是基于Hash表的映射;WeakHash是基于弱引用Hash表的映射;TreeMap是基于平衡树的映射。

 

 

[例3]使用 Map接口:

package com;

import java.util.*;

public class MapDemo

{

        public static void main(String[] args) 

        {

            Map  Months;

            int n;         

            Months=new HashMap();    //用Map的一个实现类HashMap创建对象Months          

            Months.put(1, "一月");

            Months.put(3, "三月");         

            Months.put(2, "二月");         

            Months.put(2, "二月");  //重复加入的元素被忽略    

            n=Months.size();           

            System.out.println(n); 

            System.out.println(Months.keySet());    //输出Months中所有的key

            System.out.println(Months.values());   //输出Months中所有的value

            System.out.println(Months.containsKey(2));  //Months中含有key值为2吗?      

            System.out.println(Months.containsValue("一月"));  //含有value值为"一月"吗?

            System.out.println(Months.containsValue("五月"));  //含有value值为"五月"吗?    

            System.out.println(Months.get(3));   //输出键值3对应的value值

            System.out.println(Months.get(4));  //输出键值4对应的value值

        }

}

 

运行结果:

3

[1, 2, 3]

[一月, 二月, 三月]

true

true

false

三月

null

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值