zoukankan      html  css  js  c++  java
  • JAVA基础集合(二)


    一、Map整体结构体系

        Map是集合的另一大派系,与Collection派系不同的是Map集合是以键值对儿的形式存储在集合的。两个键为映射关系,
    其中第一个键为主键(主键是唯一的不可重复),第二个键为value可以重复,他们两个是一对一的关系,可以存储集合或
    自定义类的对象。其常用的实现类有HashMap、Properties。

    二、Map接口

        Map接口为该派的“掌门”,为我们提供了一些常用的集合操作:
    (1)从此集合中移除所有映射关系(清空):
              clear()

    (2)判断此集合是否包含指定主键:
              containsKey(Object key) - 返回值为boolean(true表示包含)

    (3)判断此集合是否包含指定value:
              containsValue(Object value) - 返回值为boolean(true表示包含)

    (4)返回此集合中包含的映射关系:
              entrySet() - 返回值为Set集合(用于遍历集合)

    (5)比较指定的对象与此集合是否相等:
              equals(Object o) - 返回值为boolean(true表示相等)

    (6)根据传入的Key值获取对应的Value:
              get(Object key) - 如果没有返回为空

    (7)集合中是否存在此值:
              isEmpty() - 返回值为boolean(true表示不包含)

    (8)返回此集合的全部key:
              keySet() - 返回值为包含可以的set集合(用于集合的遍历)

    (9)将指定的值与此映射中的指定的key关联(赋值):
              put(K key, V value)

    (10)通过key删除指定的映射关系:
                remove(Object key)

    (11)返回此集合的映射关系数(长度):
                size() - 返回值为int

    (12)通过集合返回所有的value:
                values() - 返回值为 Collection<V>集合
        举例:

     1 public static void main(String[] args) {
     2 //创建2个Student1类对象
     3 Student1 s1 = new Student1("zhangsan", 12);
     4 Student1 s2 = new Student1("wangwu", 17);
     5 //创建HashMap集合
     6 HashMap<Student1, String> map = new HashMap<>();
     7 //向集合里添加
     8 map.put(s1, "001");
     9 map.put(s2, "002");
    10 //获取所有的value
    11 Collection<String> values = map.values();
    12 for (String string : values) {
    13 System.out.println(string);
    14 
    15 }
    16 System.out.println("-----------");
    17 //通过keySet()遍历集合
    18 Set<Student1> keySet = map.keySet();
    19 for (Student1 student1 : keySet) {
    20 String string = map.get(student1);
    21 System.out.println(string + " " + student1);
    22 }
    23 System.out.println("-----------------");
    24 //通过entrySet()方式便利结合
    25 Set<Entry<Student1, String>> entrySet = map.entrySet();
    26 for (Entry<Student1, String> entry : entrySet) {
    27 //获取value
    28 String value = entry.getValue();
    29 //获取key
    30 Student1 key = entry.getKey();
    31 System.out.println(value + "-" + key);
    32 }
    33 }



    三、HashMap类

        HashMap类为Map接口的实现类,方法与Map接口相同,注意主键如果为自定义类的话要重写hashCode()和
    equals(Object o) 方法,原因请看我的上一篇:JAVA基础-集合(一)。

        举例:

     1 public static void main(String[] args) {
     2 // 创建学校的HashMap,value为一个HashMap
     3 HashMap<String, HashMap<String, String>> xuexiao = new HashMap<>();
     4 // 创建一班的HashMap
     5 HashMap<String, String> yiban = new HashMap<>();
     6 yiban.put("001", "小白");
     7 yiban.put("002", "小黑");
     8 // 创建二班的HashMap
     9 HashMap<String, String> erban = new HashMap<>();
    10 erban.put("0001", "王大崔");
    11 erban.put("0002", "花轮");
    12 // 将一班和二班添加到学校里
    13 xuexiao.put("一班", yiban);
    14 xuexiao.put("二班", erban);
    15 // 遍历学校集合
    16 Set<String> keySet = xuexiao.keySet();
    17 for (String key : keySet) {
    18 HashMap<String, String> hashMap = xuexiao.get(key);
    19 System.out.println(key);
    20 // 遍历班级集合
    21 Set<String> keySet2 = hashMap.keySet();
    22 for (String string : keySet2) {
    23 String string2 = hashMap.get(string);
    24 System.out.println("学号:" + string + ", 姓名:" + string2);
    25 }
    26 }
    27 }


    四、Properties类

        Properties 类为 Map 接口的另一实现类,表示了一个持久的属性集。与 IO 流一起配合使用。可
    对Properties对象应用 put 和 putAll 方法,但不建议使用这两个方法,因为它们允许调用者插入其键或
    值不是 String 的项。他的常用方法有:
    (1)用指定的键获取对应的值:
              getProperty(String key) - 返回值为String

    (2)将属性列表输出到指定的输出流:
              list(PrintStream out或PrintWriter out)

    (3)输入流中读取属性列表(键和元素对):
              load(InputStream inStream或Reader reader)

    (4)返回属性列表中所有键的枚举:
              propertyNames() - 返回值为Enumeration<?>(用于对Properties集合的遍历)

    (5)给Properties集合进行赋值:
              setProperty(String key, String value)

    (6)以你给出的字符和集合内容写入到文档里作为“标记”:
              store(OutputStream os或Writer writer, String comments)
        举例:

     1 public static void main(String[] args) throws IOException {
     2 // 创建Properties集合
     3 Properties pp = new Properties();
     4 // 创建输出流
     5 FileWriter writer = new FileWriter("c.properties");
     6 pp.setProperty("a", "1");
     7 pp.setProperty("b", "3");
     8 pp.setProperty("c", "4");
     9 // 将Properties集合里的数据写入文档,标记为Test
    10 pp.store(writer, "Test");
    11 writer.close();
    12 FileReader reader = new FileReader("c.properties");
    13 Properties pp1 = new Properties();
    14 // 读取到新的Properties里
    15 pp1.load(reader);
    16 // 通过propertyNames()方法遍历集合
    17 Enumeration<?> propertyNames = pp1.propertyNames();
    18 // 因为返回的是枚举所以用这种方法遍历
    19 while (propertyNames.hasMoreElements()) {
    20 String object = (String) propertyNames.nextElement();
    21 String property = pp1.getProperty(object);
    22 System.out.println(object + " " + property);
    23 }
    24 }

        写入的c.properties文件

    1 #Test
    2 #Fri Sep 15 21:48:27 CST 2017
    3 b=3
    4 a=1
    5 c=4



    我们在键盘上留下的余温,也将随时代传递到更远的将来~
  • 相关阅读:
    字符串截取例子 大小写转换 拼接例子 把oc转成c语言
    字符串比较 是否相同 大小 创建字符串 例子
    数组于字典:把多个字典放到数组中
    考核7
    Delphi 单元不能被循环引用
    Delphi ADOQuery无法更新定位行问题(其它数据库访问控件类似)
    SQL远程服务器操作数据
    s​p​c​o​m​m​属​性​详​解
    dxSkinController动态调入皮肤
    RegisterClass与GetClass
  • 原文地址:https://www.cnblogs.com/0813lichenyu/p/7546096.html
Copyright © 2011-2022 走看看