容器的扩展-1

Enumeration接口

Enumeration接口的作用和Iterator的作用有点相似,实际上就是Iterator取代了它,它有两个方法:
hasMoreElements()和nextElement(),作用和Iterator中的hasNext()和next()功能一致。

import java.util.Enumeration;
import java.util.Vector;

public class TestEnumeration {
    public static void main(String[] args) {
        Vector<String> vector = new Vector<>();
        vector.add("javase");
        vector.add("html");
        vector.add("oracle");

        Enumeration<String> en = vector.elements();
        while(en.hasMoreElements()){
            System.out.println(en.nextElement());
        }
    }
}

Enumeration还有个子类StringTokenizer,和split类似用于字符串分割,不过不支持正则,而split是支持的

public class TestStringTokenizer {
    public static void main(String[] args) {
        String str = "this is a cat;that is a mice;i am the god";
        StringTokenizer token = new StringTokenizer(str,";");
        while(token.hasMoreElements()){
            System.out.println(token.nextElement());
        }   
    }
}
//输出:this is a cat
       that is a mice
       i am the god

容器的同步控制与只读设置

对于ArrayList、HashMap和HashSet,其实线程都是安全的,不过可以通过Collections中的方法将其包装为线程安全。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 使用Collections管理同步容器
 *      synchronizedList
 *      synchronizedMap
 *      synchronizedSet
 * @author Administrator
 *
 */
public class Demo01 {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        //将list制作成线程安全的,也就是同步的
        Collections.synchronizedList(list);
    }
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 测试只读设置
 * 1.emptyxxx()空的不可变的集合 
     * emptyList() 
     * emptyMap()
     * emptySet()
 * 2.singletonxxx()一个元素不可变的集合
     * singleton(T o) 
     * singletonList(T o) 
     * singletonMap(K key, V value) 
 * 3.unmodifiableXxx() 不可变容器
     * unmodifiableList(List<? extends T> list) 
     * unmodifiableSet(Set<? extends T> s) 
     * unmodifiableMap(Map<? extends K,? extends V> m) 
 * @author Administrator
 *
 */
public class Demo02 {

    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        map.put("aa", "11");
        map.put("bb", "22");
        //只读控制
        Map<String, String> map2 = Collections.unmodifiableMap(map);
//      map2.put("cc","33");
        //会报错,因为容器的容量已经被unmodifiableMap包装成不可变
//      System.out.println(map.size());

        List<String> list = Collections.singletonList(new String());
//      list.add("a");     -->报错,因为singletonList只能包含一个元素
//      list.add("b");
        System.out.println(list.size());
    }

    public static Set<String> oper(Set<String> set){
        if(set==null){
            //外部避免处理空指针异常的问题
            return Collections.EMPTY_SET;
        }

        return set;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值