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
原文地址:https://www.cnblogs.com/aigeileshei/p/5565981.html