• 数据开发_Python字典遍历和Java字典遍历


    顺序:

    排序:
       插入顺序  自然键值顺序 自定义顺序
     遍历:
        遍历的方式
    	遍历的顺序
    	   遍历的顺序 
    	     01.两次遍历该字典输出的顺序是否一致
    		 02. 按照什么顺序访问	  
    

    排序:

    01.本身的顺序情况
    02.For循环的顺序情况:
    

    Java排序:

    HashMap 的值是没有顺序的,它是按照key的HashCode来实现的。
           /数据结构:数组 + 链表  JDK1.8增加了红黑树部分
       支持key和value为null的情况,即HashMap最多只允许一条记录的键为null,允许多条记录的值为null
       迭代器是fail-fast 是非线程安全的
    LinkedHashMap: 迭代的时候,也是按照插入顺序迭代 / 
           数据结构 比 HashMap 多维护了一个双向链表
        重写HashMap的实体类Entry,来实现能够将HashMap的数据组成一个双向列表,其存储的结构还是数组+链表的
    TreeMap 基于红黑树(Red-Black tree)的 NavigableMap 实现,
           该映射根据其键的自然顺序进行排序,
            或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
    ConcurrentHashMap
    

    Java顺序

     如果是Collection,遵循其Iterator的顺序;
    	     List按照插入的顺序迭代,ArrayList元素存储的顺序与插入顺序一致,LinkedList元素的地址不能保证与插入顺序一致
     - 如果是Array,从第一个遍历到最后一个  int i = 0; i < expression.length(); i++
         传统的for循环遍历,基于计数器的
    	   判断条件为 i<array.length, 这个是否每次循环都会取出数组长度?
    

    Java遍历

       使用传统for循环进行遍历
       使用iterator遍历set集合
       使用增强for循环遍历set集合
    

    Python的遍历

    遍历:
        for(var x : expression) statement 是基于迭代器遍历,Iterator
       01. enumerate 可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标
    	FOR x IN data:
    	  statement
      02.实现了__iter__和__next__方法的对象,都属于可迭代对象
    	
     1.字典:
      字典本身: Python保证遍历字典所有元素,但不保证遍历的顺序
         Python 3.7 之前,字典都是无序存储的,但到了 Python 3.7,有序特征只是 CPython 在实现时的 side effect
      即 不能通过索引位置来得到相应的值
          import collections 中的 OrderedDict 是有序的
        或者: Python 3.X后可以使用内置sorted函数:for key in sorted(dict_type): print(key, '=', dict_type[key])
       字典的遍历
            Python搜索或者遍历时用的并不是键值的值比对,而是键值的hash值去比,那
         么遍历顺序就跟hash值的值有关。
      顺序:
        期望按预先的顺序进行遍历的话,可以通过两个List分别存储Key和Value,然后通过zip合并为Dictionary,再遍历
    

    示例代码

    # Python代码
    def create_multi_dict(pairs)-> f_dict:
        f_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)
        return f_dict
    
     //Java代码
      import java.util.*;
      
      public class Traversal {
          public static void main(String[] args) {
              List<String> items = Arrays.asList(
                      "banana",
                      "apple", "apple",
                      "orange", "orange", "orange",
                      "peach", "peach", "peach", "peach",
                      "pear","pear","pear","pear","pear"
              );
              Map<String, List<String>> resultMap = new HashMap<>(1024);
              for (String item : items) {
                  List<String> tempList = resultMap.get(item);
                  if (tempList == null ) {
                      tempList = new ArrayList<>();
                  }
                  tempList.add(item);
                  resultMap.put(item, tempList);
              }
              for(Map.Entry<String,List<String>> item : resultMap.entrySet()){
                  System.out.println(item.getKey() + item.getValue());
              }
          }
      }
  • 相关阅读:
    动态规划总结(01背包 完全背包 多重背包)
    HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)
    HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化)
    HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化)
    HDOJ(HDU).2159 FATE (DP 带个数限制的完全背包)
    HDOJ(HDU).4508 湫湫系列故事――减肥记I (DP 完全背包)
    HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包)
    HDOJ(HDU).1114 Piggy-Bank (DP 完全背包)
    HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解)
    POJ.3624 Charm Bracelet(DP 01背包)
  • 原文地址:https://www.cnblogs.com/ytwang/p/14133238.html
Copyright © 2020-2023  润新知