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物件之間的相互轉換。希望能對讀者有所幫助,歡迎隨時指正和交流。