![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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()+"\t"+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 { }
Properties:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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)); } } }