zoukankan      html  css  js  c++  java
  • 数据开发_Python中字典和Java映射总结

    开发语言

    通过对比不同开发语言的特性,了解各个语言的特质以及共通之处,有效和适当的采用相应的开发语言和开发技巧
    

    Python

    基本内容: 键不可重复且必须是可hash的 凡是可变对象都不可以做字典的key
     1.定义  dict()  或者 {}
     2. keys values() items()
     3. []  get   字典的pop方法  
      新的索引键并为其赋值,可以将项目添加到字典中。一对中括号紧跟在字典后面,中括号里写key,等号右侧写value
        pop() 方法删除具有指定键名的项: popitem() 方法删除最后插入的项目(在 3.7 之前的版本中,删除随机项目)
         # 两个输入参数式当key不存在时,pop方法会返回这个默认值,如果是只有一个输入参数则当key不存在时,程序会报错
           print(student.pop('score', 50))
        clear() 关键字清空字典:
       setdefault()	返回指定键的值。如果该键不存在,则插入具有指定值的键。
       update()	使用指定的键值对字典进行更新
     def statis_col_2(a):
        d = dict()
        for sig in a:
            d[sig] = d.get(sig, 0)+1
        print(d)
        return d
     4.初始化 for sigle_example in dict_example:   以及 multidict 和赋初值
     想要一个键映射多个值,将这多个值放到另外的容器中, 比如列表或者集合里面
           d = {'a': [1, 2, 3]}
           # 列表和元组的组合
           pairs = [("a", 'Spring'), (1, 'Summer'), (1, 'Fall'), (3, 'Winter')]
           for key, value in pairs:
               if key not in d:
                   d[key] = []
               d[key].append(value)
           print(d)
         另外的写法
           pairs = [("a", 'Spring'), (1, 'Summer'), (1, 'Fall'), (3, 'Winter')]
           f_dict = dict()
           for key_cd, value_cd in pairs:
               data = f_dict.get(key_cd)
               if data is None:
                   f_dict[key_cd] = []
               f_dict[key_cd].append(value_cd)
           print("$##########",f_dict)
     5.内置函数: 
       len() 
       del score_dict['示例']  del 关键字删除具有指定键名的项目: del 关键字也可以完全删除字典:
       in 或者not in 成员操作符
       内建函数 next(iterator)
     6 迭代器  Python里的迭代器并没有提供类似has_next()  Python的做法有一些利用异常进行流程控制的嫌疑
       Python专门将关键字for用作了迭代器的语法糖
      s = {'one':1,'two':2,'three':3}
          m = iter(s)
          while True:
              try:
                  print (next(m))
              except StopIteration:
                print("##")
                break  
    	 内置了一个模块itertools
       7.顺序
       python中字典的各项的顺序是随机的
       collections 模块中的 OrderedDict 类。 在迭代操作的时候它会保持元素被插入时的顺序
       使用 zip() 和 sorted() 函数来排列字典数据 rices_sorted = sorted(zip(prices.values(), prices.keys())) 注意: zip() 函数创建的是一个只能访问一次的迭代器
    

    Java

    1.定义: HashMap TreeMap LinkedHashMap
    2. keySet  values  entrySet
    3. put get remove   size
       getOrDefault Map集合中有这个key时,就使用这个key值,如果没有就使用默认值defaultValue
    4.遍历 
       01.for循环的形式
         for (Entry<String, String> entry : map.entrySet()) {}
       02.Iterator 迭代器的形式
           Iterator iter = map.entrySet().iterator();
           while (iter.hasNext()) {
           Map.Entry entry = (Map.Entry) iter.next();
              Object key = entry.getKey(); }
    5. 初始化
       import java.util.*;
       public class TraversalInit {
           public static void main(String [] args) { 
               //创建List 对象
               List<String> arrayList = new ArrayList<String>();
               arrayList.add("aaa");
               arrayList.add("ccc");
               arrayList.add("fff");
               //01.创建Map对象
               Map<String, String> systemNote = new HashMap<>();
               //1.创建Map对象
               Map<String, String> TestMap  = new HashMap<>();
               if (arrayList != null && !arrayList.isEmpty()) {
                   for (String row : arrayList) {
                       // 02. 使用get获取数据然后判断是否是null值
                       // get()方法的返回值为null时,可能有两种情况,一种是在集合中没有该键对象,
                       // 另一种是该键对象没有映射任何值对象,即值对象为null
                       String dataNote = systemNote.get(row);
                       if (dataNote == null) {
                           dataNote = "aaaa";
                           // 03. null值情况下,添加数据
                           systemNote.put(row, dataNote);
                       }
                     // 2. 使用 containsKey 判断是否是包含
                       if (!TestMap.containsKey(row)) {
                           // 3. 不在内的情况下,添加数据
                           TestMap.put(row, "bcdfg");
                       }
                       //04.循环结束,初始化完成
                   }
               }
               // 遍历的两种方式 1.for循环的形式
               for (Map.Entry<String, String> entry : systemNote.entrySet()) {
                   System.out.println(entry.getKey()+": " +entry.getValue());
               }
               // 遍历的两种方式 2.迭代器的形式
               Iterator iter = TestMap.entrySet().iterator();
               while (iter.hasNext()) {
                   Map.Entry entry = (Map.Entry) iter.next();
                   System.out.println(entry.getKey()+"## " +entry.getValue());
               } } } 
    6.注意: java的HashMap的key为对象 key是自定义类,要重写对象的两个方法 Map<String, Instance>   
     顺序:
         HashMap        没有顺序-随机
         TreeMap        Key的 自然顺序
         LinkedHashMap  Key的 插入顺序迭代
     Key值和Value值
        HashMap        key和value都允许为空 key可以有一个键为null, value可以有无数个值为null
    	LinkedHashMap  key和value都允许为空
    	TreeMap        key不可以为NULL, Value可以为NULL
        ConcurrentHashMap  key和value键和值 不能 有null
     HashMap就是通过对象的= hashCode() 和 equals 判定是否为同一个key,重写这两个方法
       
     7.源码以及
      java.util.Iterator;    
      package java.util;  
      public interface Iterator<E> {  
          boolean hasNext();  
          E next();  
          void remove();   }    
    重写 equals() 和 hashCode()
      01.重写 equals()
       默认的equals()实际是判断两个引用是否指向内在中的同一个对象,相当于 == . 
          重写时要遵循以下三步:
        1. 判断是否等于自身.
        if(other == this)return true;
        2. 使用instanceof运算符判断 other 是否为Coder类型的对象.
        if(!(other instanceof Coder))return false;
        3. 比较Coder类中你自定义的数据域,name和age,一个都不能少.
        Coder o = (Coder)other; return o.name.equals(name) && o.age == age;
      02.重写hashcode()
       要保证Coder对象中所有的成员都能在hashCode中得到体现
             result = result * 31 + name.hashCode();
     		result = result * 31 + age;
    	    return result;
     HashMap  默认值 capacity 16    load Factory 0.75   threshold = loadFactor * capacity。
           元素个数(size)超过临界值(threshold)时就会自动扩容
    

    参考

    参考<Cookbook>
  • 相关阅读:
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
  • 原文地址:https://www.cnblogs.com/ytwang/p/13919482.html
Copyright © 2011-2022 走看看