容器

1、容器

容器的API都位于java.util中;

接口:Collection (定义了存取一组对象的方法)

    有两个子接口:Set (数据对象无顺序不可以重复;没有提供额外的方法;与数学中

                  的集合相对应) :接口实现的类:HashSet / LinkedList / ArrayList           

                  List(有顺序可以重复;每个元素都对应一个整数型的序号记载位

                   ) : 接口实现的类:HashMap

         

   提供 List 容器类的方法:object get(int inndex)  object set(int index,object element)

                        Void add(int index,object element)  object remove(int index)

                          Int indexOf(object o)    int lastIndexof(object o)

java.util.Collections 提供了一些静态方法实现了基于List容器的常用算法:

    Void sort (List) List容器内的元素排列

     Void shuffle (List) List容器内的对象随机排列

     Void reverse (List) 逆序排列

     Void fill (List , object) 用特定对象重写List容器

     Void copy( List dest , List src) src里的内容拷贝到dest

     Int binarySearch(List , object) 用二分法查找特定对象

 

List  l1 = new LinkedLisr();

List  l2 = new LinkedList();

For (int i = 0;i<=9;i++) { li .add(“a”+i);}

Collections.shuffle(l1);

Collections.reverse(l1);

Collection.binarySearch( li , “a5”);

                  

     容器类对象在调用removecontains等方法时需要比较对象是否相等,这会涉及              对象类型的equals hashCode方法,对于自定义的类型,需要重写equals 和                                      hashCode方法。重写equals方法时就要重写hashCode方法,两个对象相等时,其hashCode也相等。

     Iterator  :  实现了Collection接口的容器类都有一个iterator方法用以返回一个实

       现了Iterator接口的对象,Iterator 对象称作迭代器,用以方便的实现对容器

        元素的遍历操作。

          Iterator实现的方法: boolen hasNext()  判断游标右边还有没有元素

         Object next()  返回游标右边 的元素并将游标移动到 下一个位置

          Void remove() 删除游标左边的元素(此方法是在迭代过程中删除元素的唯

                      一安全的方法)

       

Collection 接口定义的方法:

       Int size()   boolean isEmpty()  void clear()   boolean contains(object element)

       Boolean add(object element)     boolean remove(object element)  

       Boolean containsAll(Collection c)     boolean addAll(Collection c)  

 boolean removeAll(Collection c)   boolean retainAll(Colection c) object[] toArray()求交集

 

 Collection 方法举例:

Import java.util.*

Public class Test {

Public static void main (String []args){

Collection c = new ArrayList ();//      Collection c = new HashSet();

可以放入不同的数据              c.add(new Name(“f1”);

C.add(“hello”);                    c.add(new Name(“f2”);

C.add(new Name(“f1”));             c.add(new Name(“f3”);

C.add(new Integer(100);             Iterator i = c.iterator();

System.out.println(c.size());           while( i.hasNext){

System.out.println(c);                Name n = (Name) i.next();

}                                System.out.println( )     

                                        }      

    Comparable 接口:可以排序的类都实现了java.lang.Comparable接口;只有一个方法     public int compareTo(object obj)  方法返回 0表示 this ==obj ; 正数 this > obj ;负数this<obj                                           

 实现Comparable接口的类通过实现comparaTo方法从而确定该类对象的排序方式;

    

     如何选择数据结构:Array 读快改慢 ;Linked 改快读慢 ;Hash 两者之间;

     

实现Map接口的类用来存储键---值对;接口的实现类有HashMap TreeMap

Map中存储的键---值对通过键来标识,所以键不能重复; 键和值都必须是对象

     Object put (object key , object value);

      Object get( object key);

      Object remove(object key);

      Boolean containsKey (object key);

      Boolean containsValue(object value);

      Int size()  ;  boolean isEmpty()  ;  void putAll(Map t);    void clear();

 

 

Import java . Util .*;

public class Test{

   Public static void main(String args [] ){

      Map m1 = new HashMap ();  Map m2 = new HashMap();

      m1.put (“one”,”new Integer(1)”);

      M1.put(“two”,”new Integer(2)”);

      M2.put(“A”,”new Integer(3)”);

       If(m1.containsKey(“two”){            

          Int i = ((Integer) m1.get(“two”)).intValue();

          System.out println(i);

        }

      Map m3 = new HashMap ();

      M3.putAll(m2);

   }

 

Import java.util.*;

Public class TestArgsWords{

   Private static final Integer ONE = new Integer(1);

   Public static void main(String args []){

   Map m = new HashMap ();

   For(int i = 0;i <= args.length ; i++){

      Integer freq = (Integer)m.get(args[i]);

      M.put(args[i],freq == null? ONE : new Integer (  freq.intValue () + 1));统计各个输入参数的个数

       }  

}

}

 

 

泛型 Generic :  JDK 1.4以前类型不明确,装入集合的类型都被当做object,失去自己的实际类型;取出时需要转型,效率低,易产生错误;

     所以 可以在定义集合时同时定义集合中对象类型;

Import java.util.*;

Public class BasicGeneric{

Public static void main(String args []){

List <String> c = new ArrayList <String> ();

C.add(“aaa”);  c.add(“bbb”);  c.add(“ccc”);

For(int i = 0; i < c.size() ; i++){

 String s = c.get(i);  应用泛型直接 得到String类型不需要强制转化,若不用泛型返

 System.out println(s);   回的为object类,需转化为String类型

}

 

Collection <String> c2 = new HashSet <String>();

C2.add(“aaa”);  c2.add(“ddd”);

For (Iterator <String> it = c2.iterator() ; it.hasNext(); ){

String s = it.next();

System.out.println(s);

}

}

}

LinkedList :其数据结构采用的是链表,此种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。

ArrayList:其数据结构采用的是线性表,此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。

HashSet: Set类不允许其中存在重复的元素(集),无法添加一个重复的元素(Set中已经存在)。HashSet利用Hash函数进行了查询效率上的优化,其contain()方法经常被使用,以用于判断相关元素是否已经被添加过。

HashMap: 提供了key-value的键值对数据存储机制,可以十分方便的通过键值查找相应的元素,而且通过Hash散列机制,查找十分的方便。

 

posted @ 2016-11-30 18:24  流放的可乐  阅读(206)  评论(0编辑  收藏  举报