zoukankan      html  css  js  c++  java
  • Collections类

    Collection是最基本的集合接口。
    一个Collection代表一组Object对象,即Collection的元素(Element)。
    Collection是接口,不能直接new
    Collection还有很多接口,子接口有很多实现类,我们只能new    子接口的实现类

    实例:
    public void v1(){
        /**
         *父类申明,子类实现
         */
        Collection cn = new ArrayList();
        cn.add(1);
        cn.add(12.2d);
        cn.add(123.3f);
        cn.add('a');
        cn.add("nimei");
        cn.add(true);
        Date d = new Date();
        cn.add(d);
        Iterator it = cn.iterator();
        while(it.hasNext()){
            Object oo = it.next();
            System.out.println(oo);
            
        }
    }      
    集合和数组区别:
    数组中存放的是同一类数据,而集合中可以存放多种类的数据

    Iterator:
    hasNext():判断集合中的元素是否遍历完毕,如果没有,就返回true
    next()    :返回下一个元素
    remove();从集合中删除上一个next()方法返回的元素

    例子:    
            Iterator it = collection.iterator();
        while(it.hasNext()){
            Object obj = it.next();
        }
    ------------------------------------------------
    常用的集合类:List,Set,Map

    List:
    list是有序的Collection,使用此接口能够精确的控制每个元素插入的位置,用户能够使用索引(元素在list中的位置,类似于数组中的下标)来访问list中的元素,这类似于java数组
    List允许有相同的元素,Set不允许
    实现list接口的常用的类有ArrayList,LinkedList,Vector。
    -----------------------------------

    ArrayList代表可变的数组,允许对元素进行快速的随机访问,但是向ArrayList中插入与删除元素的速度较慢。
    实例:
    public void v2(){
        ArrayList ll = new ArrayList();
        ll.add("fuckyou1");
        ll.add("fuckyou2");
        ll.add("fuckyou3");
        ll.add("fuckyou4");
        ll.add("fuckyou5");
        ll.add("fuckyou6");
        ll.add("fuckyou17");
        ll.add("fuckyou8");
        //System.out.println(ll);
        Iterator it = ll.iterator();
        while(it.hasNext()){
            Object oo = it.next();
            System.out.println(oo);
        }
        Object aa = ll.get(1);
        System.out.println("aa"+aa);
    } 
     ---------------------------------------------------------
    Vector是同步的,而ArrayList是异步的,所以Vector的性能要差
    -----------------------------------------------------------
    linkedList:实例;
    public void v3(){
        LinkedList ll = new LinkedList();
        for (int i = 0; i < 5; i++) {
            ll.add(i);
        }
        
        //ll.add(6,"fuckyou");
        //ll.add(1,"666");
        //ll.set(0, 22);
        //ll.remove();
        Collections.shuffle(ll);
        System.out.println(ll);
        Collections.reverse(ll);
        System.out.println(ll);
        Collections.sort(ll);
        System.out.println(ll);
    }  
    ------------------------------------------------------
    Set:

    Set是简单的一种集合,集合中的对象不按照特定的方式排序,并没有重复的对象,Set接口主要有两个实现类
    HashSet,TreeSet

    HashSet类具有很好的存取和查找功能。
    Set无序的,不会按照add的顺序打印出来,并且不重复。

    代码演示:
    HashSet:
    public void v4(){
        HashSet hs = new HashSet();
        hs.add("a1");
        hs.add("a2");
        hs.add("a3");
        hs.add("a4");
        hs.add("a5");
        hs.add("a6");
        hs.add("a17");
        hs.add("a8");
        hs.add("a9");
        //System.out.println(hs);
        //hs.clear();
        System.out.println(hs);
        System.out.println(hs.isEmpty());
        Class<? extends HashSetclass1 = hs.getClass();
        for (Object object : hs) {
            System.out.println("object"+object);
            
        }
        
    } 

    -----------
    TreeSet是一个有序的集合,TreeSet中的元素按照升序排列,缺省是按照自然排序经行排列

    自然排序的情况下,一个TreeSet只允许存放同一个类型的多个元素,这里要求不是自定义的类。

    有序:存放同一类的元素。

    TreeSet:
    public void v5(){
        TreeSet ts = new TreeSet();
        ts.add(1);
        ts.add(2);
        ts.add(3);
        ts.add(4);
        ts.add(5);
        ts.add(6);
        System.out.println(ts);
        
    }

     -----、
    对于自定义的类,如果不做适当的处理,TreeSet中只能存储一个该类型对象的实例
    如下:
    package day07;
    import java.util.Iterator;
    import java.util.TreeSet;
    /***
     * TreeSet演示自定义的类
     * 对于自定义的类,如果不做适当的处理,TreeSet只能存储一个该类型的对象的实例
     * @author yw.wang
     *
     */
    public class Test03 {
    public static void main(String[] args) {
        TreeSet<Demo> tSet = new TreeSet<Demo>();
        Demo d1 = new Demo(1,"abc");
        Demo d2 = new Demo(2,"xyz");
        
        tSet.add(d1);
    //    tSet.add(d2);        //如果有这条语句,运行程序时候会抛出ClassCastException异常
                            //如果没有这条语句,程序会正常运行,并输出d1的内容
        
        Iterator<Demo> iterator = tSet.iterator();
        while(iterator.hasNext()){
            Demo d = iterator.next();
            System.out.println("a= "+d.a" ""b = "+d.b);
            System.out.println();
        }
        
    }
    }
    class Demo{
        int a ;
        String b;
        public Demo(int a ,String b){
            this.a = a;
            this.b=b;
        }
    }

    -----------------------------------------------------------
    Map类:

    Map(映射)是一种能把键对象和值对象经行映射的集合,它的每一个元素都包含一对键对象和值对象。

    向Map集合中加入元素时,必须提供一对键对象和值对象,从Map集合中检索元素时候,只要给出键对象,就会返回对应的值对象

    接口Map提供了根据关键字找对应值方法get()
    还提供了对应值存放方法put(Object key,Obkect value)

    演示Map类:
    public void v6(){
        HashMap mm  = new HashMap();
        mm.put(1, "aaa");            //存放
        mm.put(2, "bbb");
        mm.put("hhaha""heheh");
        mm.put("haha""aaa");
        mm.put("hehe""hehe");
        mm.put("nimei""hihi");
        System.out.println(mm.get("nimei"));    //获取
    }      

    -----------------------------------------------------------------------
    泛型:
    泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数、

    public static void main(String[] args) {
            List li = new ArrayList();
            li.add(new ArrayList(3));
            Integer i = (Integer)li.get(0);
            
            //下面使用泛型实现
            List<Integer> li1 = new ArrayList<Integer>();
            li.add(new Integer(3));
            Integer i1 = li1.get(0);
            
        }  

    泛型的通配符:
    K    键
    V    值
    T    类型
    E    枚举
        任何类型

    ------
    泛型示例:
    public void v7(){
        ArrayList<Integer> ll  = new ArrayList<Integer>();
        ll.add(1);
        ll.add(2);
        ll.add(3);
        ll.add(4);
        ll.add(5);
        ll.add(6);
        System.out.println(ll);
        HashMap<Integer,String> mm = new     HashMap<Integer,String>();
        mm.put(1, "abc");
        mm.put(2, "a");
        mm.put(3, "b");
        mm.put(4, "c");
        System.out.println(mm);
        System.out.println(mm.get(1));
    } 

     --------------------------------
    补充:
    增强for()

    特点;
    增强for循环对于遍历array或Collection的时候相当方便
    除了简单遍历并读出其中的内容外,不建议使用增强for循环

    缺陷:
    数组:不能方便的访问下标的值
    集合:    与Iterator相比,不能方便的删除集合中的内容

    -----------
    代码示例:

    package day07;
    import java.util.Date;
    /*****
     * 增强for的演示
     * @author yw.wang
     *
     */
    public class Test05 {
    public static void main(String[] args) {
        int [] num ={1,2,3,4,5};
        //原本的for循环
    //    for (int i = 0; i < num.length; i++) {
    //        System.out.println(num [i]);
    //    }
        
        //增强for
        for (int i : num) {
            System.out.println(i);
            
        }
        
        Date [] dd = new Date[7];
        dd[0] = new Date();
        dd[1] = new Date();
        dd[2] = new Date();
        dd[3] = new Date();
        dd[4] = new Date();
        dd[5] = new Date();
        dd[6] = new Date();
        for (Date date : dd) {
            System.out.println(date);
        }
        
        Test05 [] tt = new Test05[3];
        tt[0] = new Test05();
        tt[1] = new Test05();
        tt[2] = new Test05();
        for (Test05 test05 : tt) {
            System.out.println(test05);
        }
    }
    }


















  • 相关阅读:
    C#图解教程学习笔记——类和继承
    C#图解教程学习笔记——类相关的概念
    C#图解教程学习笔记——方法
    C#图解教程学习笔记——数据类型与数据存储
    模板方法模式
    命令模式
    访问者模式
    观察者模式
    策略模式
    单体【其他模式】
  • 原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/79e87ebffce0e9f4e092443ca1f61a42.html
Copyright © 2011-2022 走看看