zoukankan      html  css  js  c++  java
  • Map以及其子类

    package com.Map;
    
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    /*
     * 引入Map
     * 我们知道集合是为了存储对象的。Collection集合的特点是存储一些对象,里面的每一个值都是一个对象
     * 当遇到这样的情况:
     *     比如:学校中的学生,如何查询呢?根据学号查询学生
     *     如果使用的是Collection保存的数据,就需要遍历collection所有学生,然后查找对应学号的学生的内容
     *  如果是使用的Map集合的话,可以特别将学生id提出来,因为它是唯一的,作为键,然后遍历所有键,找到
     *  对应键,然后表示出键所对应的学生信息
     *  我感觉,使用Map存储数据可以简化查询时间。
     *  
     *  Map<K,V>  映射项(键值对)
     *  key是不可以重复的,map的数据结构只与key有关,value是该key中存储的值
     *  
     *  Map<K,V>的方法
     *  
     * 增、 改:
     *      Object put(key,value)//返回的是原来该key中的value
     *      putAll(Map<? extends K,? extends V> m) 将m中的所有映射加入到此map,如果有key相同的则替换操作
     *  删:
     *      clear()
     *      remove(Object key) //删除指定key的键值对
     *  判断:
     *      containsKey(Object key)
     *      containsValue(Object key)
     *      equals(Object o)
     *      hashCode()
     *      isEmpty()     
     *  获取:
     *      Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的Set视图
     *      get(Object key) 获取Map中对应key的属性值
     *      Set<k> keySet() 返回此映射中的key的Set集合
     *      Collection<V> values() 返回此映射中包含的值的Collection视图
     *      size() 返回此映射中的键-值映射关系数量
     */
    public class Study01 {
        public static void main(String[] args) {
            Map<Integer,String> map=new HashMap<Integer,String>();
            Map<Integer,String> map1=new HashMap<Integer,String>();
            //put(K,V)
            System.out.println("put:"+map.put(1, "guodaxia"));
            map.put(1, "guoxiaoxia");
            map1.put(1, "aao");
            map1.put(2,"QAQ");//QAQ 哭,卖萌
            
            //putAll
            map.putAll(map1);
            System.out.println(map);//重写了toString
            
            //remove(Object key)
    //        System.out.println("remove:"+map.remove(1));
    //        System.out.println(map);
            
            //clear()
    //        map.clear();
    //        System.out.println(map);
            
            System.out.println(map.containsKey(1));
            System.out.println(map.containsValue("QAQ"));
            
            //get(key)
            System.out.println(map.get(1));;
            
            //keySet()
            Set<Integer> keys=map.keySet();
            for(int i: keys){
                System.out.println(i+"---"+map.get(i));
            }
            //values()
            Collection<String> l=map.values();
            for(Iterator<String> it=l.iterator();it.hasNext();){
                System.out.println(it.next());
            }
            
            //Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的Set视图
            //Map.Entry<K,V>是一个接口,它的实现类存储了一对映射值key--value,你将它理解成为一个存储键值对的对象
            //它的几个方法:
    //            getKey()
    //            getValue()
    //            toString()
    //            setValue()
    //            hashCode()
    //            equals()
    //        它和Collection中的迭代器类似,可以说成是Map集合的特有迭代器,所以也可以通过这个修改集合内容
            Set<Entry<Integer,String>> s= map.entrySet();
            for(Entry<Integer,String> ss:s){
                System.out.println(ss.getKey()+"	"+ss.getValue());
            }
            for(Entry<Integer,String> ss:s){
                if(ss.getKey()==2){
                    ss.setValue("haha");
                }
            }
            System.out.println(map);
            
        }
    
    }
    
    
    package com.Map;
    
    /*
     * 
     * hashMap 哈希表结构
     * 
     * linkedHashMap 底层是哈希表和链表,有序唯一
     *
     *    TreeMap
     *    键是红黑树结构  有特定顺序,唯一
     *    排序和唯一与排序方式有关
     *自然排序是实体类实现Comparable接口
     *排序器实现。
     *    创建排序器,排序器是一个类,实现Comparator接口
     *    在创建TreeMap时候构造方法导进去排序器
     */
    public class Study02 {
    
    }
    View Code

     Properties:

    package com.Map;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Properties;
    import java.util.Set;
    
    /*
     * Properties
     *  Hashtable类的子类,Properties 类表示了一个持久的属性集
     *  它不是一个泛型类,默认存储的键值对都是Object类型的。
     *  功能:
     *      Properties首先可以用到Hashtable的基本功能:存储键值对
     *      特殊的方法:
     *          String getProperty(String key, String defaultValue) 
     *          getProperty(String key)
     *          setProperty(String key,String value)
     *          Set<String> stringPropertyNames() 
     *       getProperty有关的其实是类似装饰模式一样,在Properties中重新定义了什么setProperty方法,内部使用的是Hashtable的泛型。
     *  Properties最主要的特点就是可以和流对象和xml对象进行交互
     *       void list(PrintStream out)    将属性列表输出到指定的输出流。 
     *       void list(PrintWriter out)       将属性列表输出到指定的输出流。
     *       void load(InputStream inStream)   从输入流中读取属性列表(键和元素对)。 
     *       void load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。 
     *       void loadFromXML(InputStream in)      将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。 
     *       void store(OutputStream out, String comments)   以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
     *       void store(Writer writer, String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。 
     *       void storeToXML(OutputStream os, String comment)   发出一个表示此表中包含的所有属性的 XML 文档。
     *       void storeToXML(OutputStream os, String comment, String encoding)  使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。 
     *          参数comment,指的是写入对象中的描述
     */
    public class PropertiesDemo {
        public static void main(String[] args) throws IOException {
    //        test01();
    //        test02();
            test03();
        }
        public static void test03() throws IOException{
    //        Properties prop=new Properties();
    //        prop.put("it001", "java");
    //        prop.put("it002", "hello");
    //        prop.put("it003", "world");
    ////        prop.list(System.out);
    ////        OutputStream os=new FileOutputStream("prop.txt");
    //        FileWriter fw=new FileWriter("prop.txt");
    //        prop.store(fw, "我是一匹狼");//解析中文可能乱码,使用字符流都乱码了
    //        
    //        prop.storeToXML(new FileOutputStream("prop.xml"), "Youxi");
    //        fw.close();
            
            //--------------------------------------
            Properties prop=new Properties();
            prop.load(new FileInputStream("prop.txt"));//注意:解析的文本中格式应该为键值对的格式
            Set<String> set=prop.stringPropertyNames();
            for(String s:set){
                System.out.println(s+"----"+prop.getProperty(s));
            }
        }
        public static void test01(){
            Properties prop=new Properties();
            prop.put("it001", "java");
            prop.put("it002", "hello");
            prop.put("it003", "world");
            
            Set<Object> set=prop.keySet();
            for(Object obj:set){
                System.out.println(obj+"-------"+prop.get(obj));
            }
        }
        public static void test02(){
            Properties prop=new Properties();
            prop.setProperty("java", "eclipes");
            prop.setProperty("c", "c-free");
            prop.setProperty("C#", "x-code");
            
            System.out.println("java"+"-----"+prop.getProperty("java"));
            System.out.println("android"+"----"+prop.getProperty("android", "eclipes"));
            Set<String> set=prop.stringPropertyNames();
            for(String s: set){
                System.out.println(s+"------"+prop.getProperty(s));
            }
        }
        
    }
    View Code
  • 相关阅读:
    如何优雅地结束线程的生命周期
    线程的interrupt()
    线程的join()方法
    守护线程Daemon
    使用多线程模拟一个银行叫号窗口
    多线程介绍
    十八、MySQL 数据排名查询某条数据是总数据的第几条
    spring cloud stream整合
    036线程进程(重要)
    035server端并发聊天
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5565981.html
Copyright © 2011-2022 走看看