Java类集

今天我看了李兴华老师对Java类集的讲解,感觉获益颇多,终于对类集有了一点认识和了解了。

呵呵……

1.设立类集的目的
   a.高性能(动态数组、链表)
   b.允许不同类型的类集以相同的方式和高度互操作方式工作
   c.容易扩展和修改
   d.Java实现类集的包:java.util
2.Java类集接口框架
   Collection   元素的类集  
   List         元素的序列
   Set          没有重复元素的类集
   SortedSet    没有重复元素且排序的类集
   Map          元素为二元偶对的汇集,不能重复
   SortedMap    在Map的基础上加上排序的要求  
   ListIterator 可遍历一个序列List的对象  (允许双向遍历列表,并可修改单元,但使用较少。)
   Iterator     一个可遍历总个类集的对象
  最核心的接口:
  Collection    Collection下存放的就是一个个对象,每次存放单个对象。
  Map           每次存放一对值:key→value
  Iterator      输出接口,只要是集合都要去用Iterator输出
 
3.Collection接口:在一般开发中为了清楚的表现处理数据的存放往往不直接使用Collection 接口
    子接口:List 
    子接口:Set  
  List既然是一个接口,则要使用必须依靠子类→ArrayList 异步
    如果要使用list,则格式为:List list=new ArrayList(); 子类对象为父接口实例化
    向对象数组中加入数据:
         boolean add(Object obj)
      加入数据后,加入数据的顺序就是输出的顺序,按顺序操作的。
      还可以数据加入到指定位置:void add(int index,Object obj); index是从零开始的。
      但是加入时最好只加入一种对象。
    向对象数组中删除数据:
        obj remove(int index);移除列表中指定位置的元素。

   现在如果希望可以一个一个元素打印出来,那该如何呢?
      1.使用for循环 
         size();返回列表中的元素数,可以得到数组的长度。
         get(int intde);返回列表中指定位置的元素。
      在开发中基本上不使用以上做法,原则:只要是集合就使用Iterator输出。
      2.使用Iterator输出
         因为集合的长度不固定,所以Iterator采用的方法是一个一个判断输出。
         如果有下一个元素,则执行;如果没有下一个元素就不执行。        
         list.iterator();返回以正确顺序在列表的元素上进行迭代的迭代器。
         iterator.hasNext();如果仍有元素迭代,则返回ture。
         obj next();返回迭代的下一个元素。
   如何只能让一个集合中只加入一种对象呢?
       我们可以在实例化的时候这样写:例如只能加String类型的对象。
          List<java.lang.String> list=new ArrayList<java.lang.String>();
    (Collection)集合操作的主要方法:
       向集合中加入数据:public boolean add(Object obj)
       从集合中删除数据:public boolean remove(Object obj)、public boolean remove(int intdex)        为Iterator实例化:public Iterator iterator()
       取出元素的个数:  public int size()
4.Set
    Set的基本使用与List一致,但是HashSet子类存放时是无序的(散列存放)
    Set与List的第二个区别:
          List中的数据允许有重复元素,重复元素保留下来
          Set中的数据不允许有重复元素,重复元素被替换掉
    既然HashSet子类存放时散列无序的,如果希望有序怎麽办呢?可以使用TreeSet子类,将内容排序,靠的是Comparable接口排序。
5.Map
    生活中经常使用到以下一种范例:
 电话本:
     key→value

     张三→127832
     李四→789808
     王五→899880
  Map的主要功能是作为查找使用,而不是作为输出使用。
  存数据的方法:
     put(Object key,Object value);将指定的值与此映射中的指定键关联。
  取内容,根据key取
     Object get(Object key);返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
  由于是两个对象参数,故实例化时指定同一种对象时应为:还是以String对象为例。
    Map map<java.lang.String,java.lang.String>=new HashMap<java.lang.String,java.lang.String>();
    而且因为这个原因,Map接口的对象不能直接使用Iterator输出,如果非要使用的话呢,就必须采用以下的步骤:
   Map→Set→Iterator→Map.Entry→key、values  详细点就是:
   map.entrySet()→Set set.iterator()→(Map.Entry) Iterator iterator.next()→Map.Entry me
    再通过  me.getKey() me.getValue() 输出键和值
 TreeMap类 可以对数据进行排序
           可以快速检索    
以上所介绍的全部为Java 2带来的新特性,即Java JDK1.2之后的,那么在JDK刚推出时也有一些类 似的功能:
  枚举Enumeration  可以对一个对象的类集中的元素进行枚举。旧向量        Iterator
        boolean hasMoreElements()  判断是否有下一内容           hasNext()
        Object nextElements()      取值                         next()
  很少用,它与Iterator的功能一致,都是用于输出集合中的内容。
  List和Set都不能使用Enumeration输出,而List的一个子类:Vector 可以使用Enumeration输出。
     Vector a.实现动态数组
            b.是同步的
     Enumeration e=vector.elements();将Vector对象的值给e。
     Vector当然也可以使用Iterator输出。

Vector有一个唯一的直接子类,就是Stack类,它实现了标准的后进先出堆栈。
  栈是一个先进后出的操作,Stack类主要方法有:
  Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
 boolean empty(); 测试堆栈是否为空。
 peek(); 查看堆栈顶部的对象,但不从堆栈中移除它。
 pop();  移除堆栈顶部的对象,并作为此函数的值返回该对象。
 push(E item); 把项压入堆栈顶部。
 search(Object obj); 返回对象在堆栈中的位置,以 1 为基数。  
   
Hashtable类与HashMap相似,但HashMap是异步的,Hashtable是同步的;采用映射的方式,不支持迭代函数。
Properties类是Hashtable的子类,用来保持值的列表。
  属性类
  与Hashtable不同的是,Properties类主要是保存字符串的,而Hashtable是保存对象的。
     setProperties(Sting key,String value)
     getProperties(String key)


本章重点:
  HashMap与Hashtable
  ArrayList与Vector
  Iterator与Enumeration

  分清楚以下几点:
  a.保存单个值的集合:Collection
    List:允许有重复元素
       ArrayList:异步处理,新的类,只能用Iterator输出
       Vector: 同步处理,旧的类,能用Iterator和Enumeration输出
    Set:不允许有重复元素
       HashSet:散列,无序
       TreeSet:有序,按Comparable排序
   b.保存一对值(Map):
       HashMap:异步处理,新的类
       Hashtable:同步处理,旧的类
       Treemap:按KRY进行排序的集合
   c.输出
      Iterator:新的输出类,方法名称较短
      Enumeration:旧的输出类,方法名称较长
 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值