List特点:元素有放入顺序,元素可重复 Map特点:元素按键值对存储,无放入顺序 Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) List接口有三个实现类:LinkedList,ArrayList,Vector LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢 ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低 Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现) Query接口有一个实现类:LinkList Map接口有三个实现类:HashMap,HashTable,LinkeHashMap HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null SortedMap有一个实现类:TreeMap 其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对
List遍历
1) List List list = new ArrayList(); list.add(1); list.add(2); list.add(4); list.add(3); Iterator iterator = list.iterator(); System.out.println("------方法一-------"); while (iterator.hasNext()) { int i = Integer.parseInt(iterator.next().toString()); System.out.println(i); } System.out.println("------方法二-------"); for (Iterator iter = list.iterator(); iter.hasNext();) { int i = Integer.parseInt(iter.next().toString()); System.out.println(i); } System.out.println("------方法三-------"); for (Object obj : list) { System.out.println(obj); } System.out.println("------方法四-------"); for (int i = 0; i < list.size(); i++) { int k = list.get(i); System.out.println(k); }
Set遍历
Set set = new HashSet(); set.add("123"); set.add("abc"); System.out.println("方法一"); // 方法一:使用迭代器 for(Iterator i = set.iterator(); i.hasNext(); ) { System.out.println(i.next()); } System.out.println("方法二"); // 方法二:使用 JDK 5 新增的 foreach 循环,只有数组和实现了 Iterable 接口的类才能这样写。 // 冒号左边是一个局部变量,表示这个 set 中被迭代出来的元素,右边是一个数组或者是实现了 Iterable // 接口的类。 for(String str : set) { System.out.println(str); }
Map遍历(1)
Map tempMap = new HashMap(); tempMap.put("a", 1); tempMap.put("b", 2); tempMap.put("c", 3); // JDK1.4中 // 遍历方法一 hashmap entrySet() 遍历 System.out.println("方法一"); Iterator it = tempMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Object key = entry.getKey(); Object value = entry.getValue(); System.out.println("key=" + key + " value=" + value); } System.out.println(""); // JDK1.5中,应用新特性For-Each循环 // 遍历方法二 System.out.println("方法二"); for (Map.Entry entry : tempMap.entrySet()) { String key = entry.getKey(); int value = entry.getValue(); System.out.println("key=" + key + " value=" + value); } System.out.println(""); // 遍历方法三 hashmap keySet() 遍历 System.out.println("方法三"); for (Iterator i = tempMap.keySet().iterator(); i.hasNext();) { Object obj = i.next(); System.out.println(obj);// 循环输出key } for (Iterator i = tempMap.values().iterator(); i.hasNext();) { Object obj = i.next(); System.out.println(obj);// 循环输出value } for (Iterator i = tempMap.keySet().iterator(); i.hasNext();) { Object obj = i.next(); System.out.println("key=" + obj + " value=" + tempMap.get(obj));// 循环输出key 和 value } System.out.println(""); // 遍历方法四 treemap keySet()遍历 System.out.println("方法四"); for (Object o : tempMap.keySet()) { System.out.println("key=" + o + " value=" + tempMap.get(o)); }
Map遍历(2)
public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("1", "value1"); map.put("2", "value2"); map.put("3", "value3"); //第一种:普遍使用,二次取值 System.out.println("通过Map.keySet遍历key和value:"); for (String key : map.keySet()) { System.out.println("key= "+ key + " and value= " + map.get(key)); } //第二种 System.out.println("通过Map.entrySet使用iterator遍历key和value:"); Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, String> entry = it.next(); System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); } //第三种:推荐,尤其是容量大时 System.out.println("通过Map.entrySet遍历key和value"); for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); } //第四种 System.out.println("通过Map.values()遍历所有的value,但不能遍历key"); for (String v : map.values()) { System.out.println("value= " + v); }