容器

容器类可以放入任何对象,但是在读取的时候进行类型转换时,如果放入的对象不一致就会出问题.
class Cat{
    private int i;
    public Cat(int i){
        this.i=i;
    }
    public void id(){
        System.out.println("cat"+i);
    }
}

class Dog{
    private int i;
    public Dog(int i){
        this.i=i;
    }
    public void id(){
        System.out.println("Dog"+i);
    }
}

public class CatasDog {
    public static void main(String[] args){
        List cat=new ArrayList();
        for(int i=0;i<10;i++)
            cat.add(new Cat(i));
        //Dog dog=new Dog(10);
        //cat.add(dog);
        for(int i=0;i<cat.size();i++)
            ((Cat)cat.get(i)).id();
    }

}
可以创建一个只能接受一种类型的ArrayList:
import java.util.*;

class Mouse {
}

public class MouseList {
    private List list = new ArrayList();

    public void add(Mouse m) {
        list.add(m);
    }

    public Mouse get(int index) {
        return (Mouse) list.get(index);
    }

    public int size() {
        return list.size();
    }

}
注意:这是一种设计模式,
关于迭代器:
package com.whl.bcsx;

import java.util.*;

public class IteratorTest {
    public static void printAll(Iterator e){
        while(e.hasNext()){
            System.out.println(e.next());
        }
    }
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add("whl");
        list.add("nj");
        list.add("java");
        Set set=new HashSet();
        set.add("jsp");
        set.add("struts");
        set.add("XML");
        printAll(list.iterator());
        printAll(set.iterator());
    }

}

迭代器的最在用处就是不用知道容器的实际类型.
无意识造成的递归:
public class Dig {
    public String toString(){
        return "address:"+this;
    }
    public static void main(String[] args) {
        List list=new ArrayList();
        for(int i=0;i<10;i++){
            list.add(new Dig());
        }
        System.out.println(list);

    }

}
上面代码会出现一个不断的异常,这是因为
"address:"+this会把this当作是一个字符串来处理,但它实际上不是字符串,所以就会调用这个对象的toString方法,这样就成了无限递归了.要避免这种情况就应该使用super.toString();
一些容器方法的运用:

import java.util.*;

public class IteratorTest {
    public static void printAll(Iterator e){
        while(e.hasNext()){
            System.out.println(e.next());
        }
    }
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add("whl");
        list.add("nj");
        list.add("java");
        Set set=new HashSet();
        set.add("jsp");
        set.add("struts");
        set.add("XML");
        List list1=new ArrayList();
        list1.add("c++");
        list1.add("vb");
        list1.add("diph");
        printAll(list.iterator());
        printAll(set.iterator());
        list.addAll(list1);
        System.out.println("----------");
        printAll(list.iterator());
        boolean bool=list.contains("jsp");
        boolean bool2=list.containsAll(list1);
        System.out.println(bool);
        System.out.println(bool2);
        System.out.println("-----------");
        list.remove("c++");
        printAll(list.iterator());
        System.out.println("-----------");
        String[] str= (String[]) list.toArray(new String[1]);
        System.out.println(str);
    }

}

注意下面的代码中,用了正则表达式的一些东西:

import java.util.*;

public class SortedSetDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        SortedSet sort = new TreeSet(Arrays
                .asList("one,two,three,four,five,six,seven,eight,nine,ten"
                        .split(",")));
        System.out.println(sort);
        String low = (String) sort.first();
        String high = (String) sort.last();
        System.out.println(low);
        System.out.println(high);
        Iterator it = sort.iterator();
        for (int i = 0; i <= 6; i++) {
            if (i == 3)
                low = (String) it.next();
            if (i == 6) {
                high = (String) it.next();
                System.out.println(high);
            } else
                it.next();
        }
        System.out.println(low);
        System.out.println(high);

    }
}
关于Map的一种用法:
package com.whl.bcsx;

import java.util.*;

class Counter{
    int i=1;
    public String toString(){
        return Integer.toString(i);
    }
}

public class Statistics {
    static Random rand=new Random();
    public static void main(String[] args){
        Map hm=new HashMap();
        for(int i=0;i<10000;i++){
            Integer r=new Integer(rand.nextInt(20));
            if(hm.containsKey(r))
                ((Counter)hm.get(r)).i++;
            else
                hm.put(r, new Counter());
        }
        System.out.println(hm);
    }

}
注意在上面的代码中不能直接使用Integer这个包装器类,因为java的包装器类只能将其初始化为一个值,而且一但指定了这个值就不能改变他了,所以在此处使用Integer是不行的.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值