详谈集合

2011-6-20  JSP正式开课

第二章   用集合存储对象

 

本章新单词:

collection  集合               key  

value   值                     stack  堆栈

queue      队列                contain   包含,包容

 

集合(collection)是存储多个元素的容器

集合用于存储检索、和操纵数据

Java的集合也被称为“容器类”;

一、Collection接口

Collection 接口存储一组不唯一无序的对象。

(1、)List 接口存储一组唯一有序(插入顺序)的对象。

    List 集合代表一个有序的集合、允许存在重复的元素、并可以存放null值。

    1、ArrayList类是基于数组实现的List类。   实现了可变长度的数组,在内存中分配连续的空间。

       随机访问集合元素的性能较好。(按索引访问)删除的性能不高

    2、LinkedList类是基于链表实现的List类。

       LinkedList是一个双链表的实现。

       LinkedList不是一个直接访问的数据结构。

       LinkedList插入删除元素时的性能非常出色。(顺序访问)

(2、)Set 接口存储一组唯一无序的对象。

    set集合不允许包含相同的元素。

    1、HastSet集合:元素是无序排列的,HashSet类是非线程安全的。允许集合元素是null。

           当像HashSet集合中添加元素时,会调用该元素的HashCode()方法得到hashcode()方法得到hashcode值,通过hashCode值决定元素的存储位置

           hashcode()方法的作用如下。

           为HashCode集合中的元素提供索引

           可以提高hashset集合查找元素的效率

    2、TreeSet类

       TreeSet类是SortedSet接口的实现类,它的集合元素是有序排列的。

       常用方法:

 

方法说明
E Ceiling(E e)返回当前set集合中大于等于给定元素的最小元素,如果不存在这样的元素,返回null
E floor(E e)返回当前set集合中小于等于给定元素的最大元素,如果不存在这样的元素,返回null

SortSet<E> subSet

(E fromElement,E toElement)

返回当前set集合的部分视图,其元素范围从fromElement(包括)到toElement(不包括)

比较HashSet类和TreeSet类

HashSet类在添加及查找元素时效率比TreeSet类高。

TreeSet类由于在保存元素时会对元素进行排序,因而时间较慢

当需要对元素进行排序时才使用TreeSet类,否则建议使用HashSet类。

集合的遍历:

    (3、)Iterator 接口的作用主要是遍历Collection集合中的元素。

    常用方法:boolean  hasNext();   //判断迭代器是否有元素

              next();      //返回迭代器的下一个元素

              void  remove();    //将迭代器返回的最后一个元素删除

    二、Map接口

      存储一组键值对象,提供key到value的映射

1、HashMap类

    HashMap类是基于哈希表实现的Map类,HashMap集合的元素是无序排列的。

2、TreeMap类

    TreeMap类是基于一个平衡二叉树实现的Map类,TreeMap集合可以对集合中的键进行排序,从而保证元素有序排列

HashMap类和TreeMap类的比较

   HashMap适用于在Map中插入、删除和定位元素

   TreeMap适用于按顺序对集合元素进行遍历

Eg:

    Map<String,String> stuMap = new HashMap<String,String>();

    stuMap.put("小艾","小艾的耳朵");     //添加值

    Set<String> stuSet = stuMap.KeySet();      //键的集合

    for(String stu : stuSet){           //遍历每一个键值

        System.Out.Println(stuMap.get(stu));    //根据键值获取value值

  

三、排序

Connection.sort(stuList,new Comparator<Student>(){

  public int cimpare(Student num0 , Student num1){

      //return num0.getStuId - num1.getStuId;    //int类型的比较

      return num0.getStuName.compareTo(num1.getStuName); //String类型的比较

  }

});

    四、List接口中定义的各种常用方法。

    返回类型        方法                                说明

    boolean     add(Object o)    在列表的末尾添加元素,起始位置的索引从0开始

    Object      get(int index)     返回指定索引位置处的元素

    int         size()           返回列表中的元素个数

    void        add(int index,Object o) 在指定的索引位置添加元素

    boolean     remove(Object o)   从列表中删除元素

    boolean     remove(int index)  从列表中删除指定位置元素,起始索引位置从0开始      

    Object      contains(value)    查询元素是否存在

    boolean     clear()          删除全部数据

    五、LinkedList的一些特殊方法

    返回类型        方法                说明

    void          addFirst(Object o)   在列表的首部添加元素

    void          addLast(Object o)    在列表的末部添加元素

    Object        getFirst()           返回列表中的第一个元素

    Object        getLast()            返回列表中的最后一个元素

    Object        removedFirst()     删除并返回列表中的第一个元素

    Object        removeLast()       删除并返回列表中的最后一个元素

    六、HashMap的一些特殊方法

    方法                       说明

    Object put(Object key,Objetc value)            添加元素

    Object get(Object key)         根据key值获取元素(即,得到vlaue值),如果不存在指定的键,返回null

    Object remove(Object key)        删除由指定的键映射的“键-值对”

    int size()                       返回元素个数

    Set keySet()                     返回键的集合

    Collection values()              返回值的集合

    boolean containsKey(Object key)  如果存在由指定的键映射的“键-值对”,返回true

   

C#中

  HashTable 哈希表

  添加元素        add(key,value)

  值得类型为Object类型,所以当得到一个值时需要类型转换

  删除元素        Remove()通过key值删除

  删除所有元素    clear()

 

Collection和Collections的区别

Collection是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法。

Collections是一个包装类,它包含有各种有关集合操作的静态多态方法,此类不能被实例化。

    是针对集合类的一个帮助类 ,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值