1. 程式人生 > >java常用資料結構基礎知識總結(二)

java常用資料結構基礎知識總結(二)

     在上一篇中,和大家交流了java常用資料結構的基礎知識。現在與大家分享各類資料結構的遍歷問題、轉換問題。

一、遍歷問題 (1) List的遍歷問題(以ArrayList為例) ①通過迭代器遍歷

    public static void traverseArrayListByIterator(List list) {         long startTime = System.currentTimeMillis();         for (Iterator iterator= list.iterator();iterator.hasNext();) {             iterator.next();         }         long endTime = System.currentTimeMillis();         System.out.println("traverseArrayListByIterator:"+(endTime - startTime)+"ms.");     }

②通過索引值(隨機訪問)遍歷

    public static void traverseArrayListByRandomAccess(List list) {         long startTime = System.currentTimeMillis();         for(int i=0;i<list.size();i++) {             ;         }         long endTime = System.currentTimeMillis();         System.out.println("traverseArrayListByRandomAccess:"+(endTime - startTime)+"ms.");     }

③通過for-each迴圈遍歷

    public static void traverseArrayListByForeach(List list) {         long startTime = System.currentTimeMillis();         for (Object object : list) {             ;         }         long endTime = System.currentTimeMillis();         System.out.println("traverseArrayListByForeach:"+(endTime - startTime)+"ms.");     }

效率測試:

(2)Map的遍歷問題(以HashMap為例) ①通過entrySet()遍歷

    public static void traverseHashMapByEntryset(Map map) {         if (map == null) {             return;         }

        Iterator iterator = map.entrySet().iterator();         long startTime = System.currentTimeMillis();         while(iterator.hasNext()) {             //Map.Entry entry = (Entry) iterator.next();             iterator.next();         }         long endTime = System.currentTimeMillis();         System.out.println("traverseHashMapByEntryset:"+(endTime - startTime)+"ms.");      }

②通過keySet()遍歷

    public static void traverseHashMapByKeyset(Map map) {         if (map == null) {             return;         }         Iterator iterator = map.keySet().iterator();         long startTime = System.currentTimeMillis();         while(iterator.hasNext()) {             iterator.next();         }         long endTime = System.currentTimeMillis();         System.out.println("traverseHashMapByKeyset:"+(endTime - startTime)+"ms.");     }

③通過value()遍歷

    public static void traverseHashMapByValue(Map map) {         if (map == null) {             return;         }         Collection collection = map.values();         Iterator iterator = collection.iterator();         //int key = 0;         long startTime = System.currentTimeMillis();         while (iterator.hasNext()) {             iterator.next();         }         long endTime = System.currentTimeMillis();         System.out.println("traverseHashMapByValue:"+(endTime - startTime)+"ms.");     }

效率測試:

(3)Set的遍歷問題(以HashSet為例) ①通過迭代器遍歷

    public static void traverseHashSetByIterator(Set set) {         long startTime = System.currentTimeMillis();         for (Iterator iterator = set.iterator(); iterator.hasNext();) {             iterator.next();         }         long endTime = System.currentTimeMillis();         System.out.println("traverseHashMapByEntryset:"+(endTime - startTime)+"ms.");     }

②通過for-each遍歷

    public static void traverseHashSetByForeach(Set set) {         String[] arr = (String[]) set.toArray(new String[0]);         long startTime = System.currentTimeMillis();         for (String string:arr) {             string.length();         }         long endTime = System.currentTimeMillis();         System.out.println("traverseHashSetByForeach:"+(endTime - startTime)+"ms.");     }

效率測試:

(4)陣列的遍歷問題 ①通過for迴圈遍歷

        //通過for迴圈遍歷陣列         System.out.print("通過for迴圈遍歷陣列:");         for(int i=0;i<arr.length;i++) {             System.out.print(arr[i]+",");         }         System.out.println();

②通過foreach遍歷

        //通過foreach遍歷陣列         System.out.print("通過foreach遍歷陣列:");         for (String string : arr) {             System.out.print(string+",");         }         System.out.println();

③通過工具類Arrays遍歷

        //通過工具類Arrays遍歷陣列         System.out.print("通過工具類Arrays遍歷陣列:");         System.out.print(Arrays.toString(arr));         System.out.println();

④通過迭代器遍歷

        List<String> list = Arrays.asList(arr);         System.out.print("通過迭代器遍歷陣列:");         for(String str:list){             System.out.print(str+",");         }         System.out.println();

⑤通過stream()遍歷陣列

        //通過stream()遍歷陣列         System.out.print("通過stream遍歷陣列:");         Arrays.asList(arr).stream().forEach(i->System.out.print(i+","));

測試:

二.相互轉換

(1)轉為json格式 ①陣列轉json

        String[] arrs = {"金星","木星","水星","火星","土星","天王星","海王星","太陽"};         String jsonStr = null;         try {             JSONArray jsonObject = JSONArray.fromObject(arrs);             jsonStr = jsonObject.toString();         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         System.out.println(jsonStr);

②List轉json

        List<String> list = new ArrayList<String>();         list.add("abcdefg");         list.add("hijklmn");         list.add("opqrst");         list.add("uvwxyz");         String jsonStr = null;         try {             JSONArray jsonObject = JSONArray.fromObject(list);             jsonStr = jsonObject.toString();         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         System.out.println(jsonStr);

③Map轉json

        Map<String, Object> map = new HashMap<String,Object>();         map.put("1", "testMap");         map.put("2", new User("嘻哈", 20, '女'));         String jsonStr = null;         try {             JSONObject jsonObject = JSONObject.fromObject(map);             jsonStr = jsonObject.toString();         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         System.out.println(jsonStr);

④物件轉json

        User user = new User("張三", 100, '男');         String jsonStr =null;         try {             JSONObject jsonObject = JSONObject.fromObject(user);             jsonStr = jsonObject.toString();         } catch (Exception e) {             e.printStackTrace();         }         System.out.println(jsonStr);

(2)json格式轉為其他格式 ①json轉為List

方式一:

        String arrayStr = "[{\"name\":\"嘿嘿\",\"age\":\"23\",\"sex\":\"男\"},{\"name\":\"哈哈\",\"age\":\"24\",\"sex\":\"女\"}]";         List<User> list =null;         try {             JSONArray jsonArray = JSONArray.fromObject(arrayStr);             //轉化為list             list = (List<User>)JSONArray.toList(jsonArray, User.class);         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         for (User user : list) {             System.out.println("陣列物件格式的json字串轉List:"+user);         }

方式二:

        String arrayStr = "[{\"name\":\"嘿2嘿\",\"age\":\"23\",\"sex\":\"男\"},{\"name\":\"哈2哈\",\"age\":\"24\",\"sex\":\"女\"}]";         User[] users =null;         try {             JSONArray jsonArray = JSONArray.fromObject(arrayStr);             //轉化為陣列             users = (User[]) JSONArray.toArray(jsonArray, User.class);         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         for (User user : users) {             System.out.println("陣列物件格式的json字串轉list:"+user);         }

②json轉為Map

        String strObject="{\"first\":{\"name\":\"中國上海\",\"age\":\"23\",\"sex\":\"男\"}}";         JSONObject jsonObject = JSONObject.fromObject(strObject);         MyBean bean = new MyBean();         Map map = new HashMap<>();         map.put("first", User.class);         try {             bean = (MyBean) jsonObject.toBean(jsonObject, MyBean.class, map);         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         System.out.println("物件格式的json字串轉Map:"+bean.getFirst());

③json轉為Object

方式一:

        String jsonStr = "{\"name\":\"呵呵\",\"age\":\"25\",\"sex\":\"男\"}";         User user = new User();         try {             JSONObject jsonObject = JSONObject.fromObject(jsonStr);             user = (User)JSONObject.toBean(jsonObject, User.class);         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }          System.out.println("物件格式的json字串轉物件:"+user);

方式二:

        String arrayStr = "[{\"name\":\"嘻嘻\",\"age\":\"26\",\"sex\":\"男\"}]";         User user = new User();         try {             JSONArray jsonArray = JSONArray.fromObject(arrayStr);             Object object = jsonArray.get(0);             JSONObject jsonObject = JSONObject.fromObject(object);             user = (User)JSONObject.toBean(jsonObject, User.class);         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }          System.out.println("陣列物件格式的json字串轉物件:"+user);

以上詳述了java中陣列、List、Map、Set等幾種資料結構的遍歷問題。程式設計實現了在web專案中常用的json資料格式與List、Map、java物件之間的相互轉換。希望能對讀者有所幫助,歡迎隨時指正和交流。