1. 程式人生 > 實用技巧 >資料開發_Python字典遍歷和Java字典遍歷

資料開發_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());
          }
      }
  }