zoukankan      html  css  js  c++  java
  • java09 队列Queue与Deque

    队列Queue与Deque.
    Enumeration
    Hashtable与Hashtable子类Properties(资源配置文件)
    引用类型(强、软、弱、虚)与WeakHashMap
    IdentitvHashMap与EnumMap
    同步控制与只读设置
    开源工具包:
        -Guava:Google Collection
        -Apache:Commons Collection
    容器总结
    
    
    
    
    队列:
        -单向队列(一端访问)
            -一般队列:FIFO,先进先出。    -特殊队列:优先级队列和堆栈LIFO,后进先出。浏览器历史也是使用堆栈实现的,后进先出。        方法:插入add(e)、offer(e),移除remove()、poll(),获取element()、peek()
        -双向队列(两端访问)    方法:插入第一个元素addFirst(e)、offerFirst(e)、push(e),插入最后一个元素addLast(e)、offerLast(e)、add(e)、offer(e),移除第一个元素removeFirst()、pollFirst()、remove()、pop()、poll(),移除最后一个元素removeLast()、pollLast(),获取第一个元素getFirst()、peekFirst()、element()、peek(),获取最后一个元素getLast()、peekLast()
        
        
    
        
        
    /**
     * 使用队列模拟银行存款业务
     */
    public class Demo01 {
        /*public interface Queue<E> extends Collection<E> {//jdk
            boolean add(E e);
            boolean offer(E e);
            E remove();
            E poll();
            E element();
            E peek();
        }*/    
        public static void main(String[] args) {
            Queue<Request> que =new ArrayDeque<Request>();
            //模拟排队情况
            for(int i=0;i<10;i++){
                final int num =i;
                que.offer(new Request(){//匿名内部类对象,只能访问final修饰的变量。
                    @Override
                    public void deposit() {                    System.out.println(""+num+"个人,办理存款业务,存款额度为:"+(Math.random()*10000));
                    }
                });
            }
            dealWith(que);        
        }
        //处理业务
        public static void dealWith(Queue<Request> que){//先进先出
            Request req =null;
            while(null!=(req=que.poll())){
                req.deposit();
            }
        }
    }
    interface Request{
        //存款
        void deposit();
    }
    
    
    public class Demo02 {
        public static void main(String[] args) {
            MyStack<String> backHistory =new MyStack<String>(3);
            backHistory.push("www.baidu.com");
            backHistory.push("www.google.com");
            backHistory.push("www.sina.com");
            backHistory.push("www.bjsxt.cn");
            
            System.out.println("大小:"+backHistory.size());
            
            //遍历
            String item=null;
            while(null!=(item=backHistory.pop())){
                System.out.println(item);
            }
            /*后进先出
            输出:www.sina.com
            www.google.com
            www.baidu.com*/
        }
    }
    
    
        
    Enumeration接口:
    和Iterator一样,Iterator取代了Enumeration。Enumeration用于jdk1.5之前。
    public class Demo01 {
    
        public static void main(String[] args) {
            Vector<String> vector =new Vector<String>();
            vector.add("javase");
            vector.add("html");
            vector.add("oracle");
            //遍历该Vector
            /* public Enumeration<E> elements() {//jdk的源码
                return new Enumeration<E>() {
                    int count = 0;
                    public boolean hasMoreElements() {
                    return count < elementCount;
                    }
                    public E nextElement() {
                    synchronized (Vector.this) {
                        if (count < elementCount) {
                        return (E)elementData[count++];
                        }
                    }
                    throw new NoSuchElementException("Vector Enumeration");
                    }
                };
                }*/
            Enumeration<String> en =vector.elements();//
            while(en.hasMoreElements()){
                System.out.println(en.nextElement());
            }
        }
    }
    
    
    
    
    /**
     * Enumeration 子类
     * StringTokenizer类似于String split() 字符串分割
     * 不支持正则表达式,split()支持正则表达式,
     * StringTokenizer(String str, String delim) 
     */
    public class Demo02 {
        public static void main(String[] args) {
            String emailStr="bjsxt@163.com;bjsxt@qq.com;bjsxt@sohu.com";
            StringTokenizer token =new StringTokenizer(emailStr,";");//实现了Enumeration接口。所以有hasMoreElements和nextElement方法。
            //遍历获取
            while(token.hasMoreElements()){
                System.out.println(token.nextElement());
            }
        }
    }
    
    
    
    
    
    Hashtable:Map实现类,与HashMap操作相同。
    HashMap线程不安全,效率相对高,键最多一个null,值可以为多个null,父类AbstrctMap。
    Hashtable线程安全(同步的),效率相对低下,键与值都不能为null,父类Dictionary(字典)。
    Properties为Hashtable的子类,Properties经常用于读写资源配置文件,键与值只能为字符串。
    
    方法:
        setProperty(String key, String value)
        getProperty(String key)
        getProperty(String key, String defaultValue)
    
    后缀为.properties的文件的存储和读操作
        store(OutputStream out, String comments)
        store(Writer writer, String comments)
        load(InputStream inStream)    
        load(Reader reader)    
    后缀为.xml文件的存储和读取
        storeToXML(OutputStream os, String comment)//默认UTF-8字符集
        storeToXML(OutputStream os, String comment,String encoding)
        loadFromXML(InputStream in)
    
    
    相对路径和绝对路径:
    1.绝对路径:windows要指定盘符,Linux和Unix要用/
    2.相对路径,相对当前工程,
    3.根据类路径加载资源文件:
    类所在的跟路径:
    类.class.getResourceAsStream("/"),
    Thread.currentThread().getContextClassLoader().getResourceAsStream("")
    
    
    import java.util.Properties;
    /**
     * Properties 资源配置文件的读写,
     * 1、Properties只能存储字符串,因此key 与value 只能为字符串
     * 2、存储与读取
     * setProperty(String key, String value) 
     * getProperty(String key, String defaultValue)  
     * @author Administrator
     *
     */
    public class Demo01 {
        public static void main(String[] args) {
            //创建Properties对象
            Properties pro =new Properties();
            //存储
            pro.setProperty("driver", "oracle.jdbc.driver.OracleDriver");
            pro.setProperty("url", "jdbc:oracle:thin:@localhost:1521:orcl");
            pro.setProperty("user", "scott");
            pro.setProperty("pwd", "tiger");
            //获取
            String url =pro.getProperty("url","test");//后面是默认值
            System.out.println(url);
        }
    }
    
    
    
    import java.util.Properties;
    /**
     * 使用Properties输出(写入到)到文件
     * 资源配置文件(可以动态的切换数据库):
     * 
     * 1、.properties
     * store(OutputStream out, String comments) 
        store(Writer writer, String comments) 
       2、.xml
       storeToXML(OutputStream os, String comment)  :UTF-8字符集
       storeToXML(OutputStream os, String comment, String encoding) 
        
    
     * @author Administrator
     *
     */
    public class Demo02 {
    
        public static void main(String[] args) throws FileNotFoundException, IOException {
            //创建对象
            Properties pro =new Properties();
            //存储
            pro.setProperty("driver", "oracle.jdbc.driver.OracleDriver");
            pro.setProperty("url", "jdbc:oracle:thin:@localhost:1521:orcl");
            pro.setProperty("user", "scott");
            pro.setProperty("pwd", "tiger");
            
            //存储到e:/others  绝对路径有盘符:
            pro.store(new FileOutputStream(new File("e:/others/db.properties")), "db配置");//others文件夹要存在,把pro对象的内容写入到文件。
                /*键值对
                #dbu914Du7F6E//这是注释
                #Mon Jul 21 13:03:09 CST 2014
                user=scott
                url=jdbc:oracle:thin:@localhost:1521:orcl
                driver=oracle.jdbc.driver.OracleDriver
                pwd=tiger*/
    
            pro.storeToXML(new FileOutputStream(new File("e:/others/db.xml")), "db配置");
                /*key和value
                <?xml version="1.0" encoding="UTF-8" standalone="no"?>
                <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
                <properties>
                <comment>db配置</comment>
                <entry key="user">scott</entry>
                <entry key="url">jdbc:oracle:thin:@localhost:1521:orcl</entry>
                <entry key="driver">oracle.jdbc.driver.OracleDriver</entry>
                <entry key="pwd">tiger</entry>
                </properties>*/
            
            //使用相对路径,默认的相对路径是当前的工程。下面是在3处存了这个属性文件。
            pro.store(new FileOutputStream(new File("db.properties")), "db配置");
            pro.store(new FileOutputStream(new File("src/db.properties")), "db配置");
            pro.store(new FileOutputStream(new File("src/com/bjsxt/others/pro/db.properties")), "db配置");
        }
    }
    
    
    import java.util.Properties;
    /**
     * 使用Properties读取配置文件,写一次读多次。
     * 资源配置文件:
     * 使用相对与绝对路径读取
     * load(InputStream inStream) 
       load(Reader reader) 
       loadFromXML(InputStream in) 
     */
    public class Demo03 {
        public static void main(String[] args) throws FileNotFoundException, IOException {
            Properties pro=new Properties();
            //读取 绝对路径
            pro.load(new FileReader("e:/others/db.properties"));
            //读取 相对路径
            //给客户的时候只给class文件(字节码文件),不会给源代码,src是源代码文件路径
            pro.load(new FileReader("src/com/bjsxt/others/pro/db.properties"));
            System.out.println(pro.getProperty("user", "bjsxt"));
        }
    }
    
    
    
    
    import java.util.Properties;
    /**
     * 使用类相对路径读取配置文件
     *  bin 路径
     */
    public class Demo04 {
        public static void main(String[] args) throws IOException {
            Properties pro =new Properties();
            //类相对路径,第一个/表示根目录(class文件中表示bin目录)  ,Demo04.class.getResourceAsStream("/")表示当前类所在的跟路径(这里就是src目录)。
            pro.load(Demo04.class.getResourceAsStream("/com/bjsxt/others/pro/db.properties"));
            //Thread.currentThread()当前线程(main线程),getContextClassLoader上下文的类加载器,Thread.currentThread().getContextClassLoader("")当前类所在的跟路径(这里就是src目录),class文件中表示bin目录 
            pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("com/bjsxt/others/pro/db.properties"));
            System.out.println(pro.getProperty("user", "bjsxt"));
        }
    }
  • 相关阅读:
    和为S的两个数字
    数字在排序数组中出现的次数
    连续子数组的最大和
    包含min函数的栈
    二进制中1的个数
    变态跳台阶
    android里R.layout.的问题
    eclipse里面设置JVM参数的问题
    perl小记
    机器寻径引导算法(最短路径表)__深搜、栈
  • 原文地址:https://www.cnblogs.com/yaowen/p/4833566.html
Copyright © 2011-2022 走看看