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("a\5");
    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);
    }
}
}


















posted @ 2016-02-19 20:39  暗夜小精灵~~  阅读(177)  评论(0编辑  收藏  举报