对于一个集合Collection,就是一个遍历(存取)和更新插入删除的操作。
(这里的存和插入是不一样的,一个是存放,一个是指定位置的插入)
1、List:ArrayList、LinkedList、Vector
ArrayList:是用Array实现的List,随机存取的时候,也就是遍历的时候,速度较快;但是不适于元素安插和移动的操作;
LinkedList:是Link实现的List,随机存取的速度适中,适于元素安插移动的操作。
故:仅仅是遍历的输出或没有其他要求存放元素时,用ArrayList;
Vector:与ArrayList类似,不同在于这个是线程安全的,写入时速度较ArrayList慢。
如果要在指定的位置插入一个元素,或者就是要删除一个元素时,用LinkedList。
2、Map:HashMap、TreeMap、LinkedHashMap、HashTable,都是存放键值对的(key/value)pairs
HashMap:它是根据键的HashCode值存储数据的,可以根据键值获取value值,具有很快的访问速度;
遍历时获取数据的顺序完全是随机的;最多只有一条记录的键值为null;不是线程安全的,即任一时刻,
可以有多个线程同时写HashMap,可能到时数据的不一致,如果需要同步,可以用
Collections的synchronizedMap方法使HashMap具有同步的功能,或者使用ConcurrentHashMap;
HashTable:与hashMap类似,不同的是,支持线程同步,不允许键值或值为空,在写入时速度较HashMap慢;
LinkedHashMap:与hashMap类似,记录了数据的插入顺序,用Iterative遍历时,先得到的数据肯定是先插入的,遍历时速度较HashMap慢;
TreeMap:实现的是SortMap接口,能够把它保存的记录根据键排序,默认的是按键值的升序排序;可以自己设置。
故:HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现。
Map部分代码:
package com.csct.test.map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
public class TestMutilIter {
public static void main(String[] args) {
// HashMap
System.out.println("------HashMap无序输出------");
HashMap<String, String> hsMap = new HashMap<String, String>();
hsMap.put("3", "Value3");
hsMap.put("1", "Value1");
hsMap.put("2", "Value2");
hsMap.put("b", "ValueB");
hsMap.put("a", "ValueA");
Iterator it = hsMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry e = (Map.Entry) it.next();
System.out.println("Key: " + e.getKey() + "--Value: "
+ e.getValue());
}
// TreeMap
System.out.println("------TreeMap按Key排序输出------");
TreeMap<String, String> teMap = new TreeMap<String, String>();
teMap.put("3", "Value3");
teMap.put("1", "Value1");
teMap.put("2", "Value2");
teMap.put("b", "ValueB");
teMap.put("a", "ValueA");
Iterator tit = teMap.entrySet().iterator();
while (tit.hasNext()) {
Map.Entry e = (Map.Entry) tit.next();
System.out.println("Key: " + e.getKey() + "--Value: "
+ e.getValue());
}
// LinkedHashMap
System.out.println("--LinkedHashMap根据输入的顺序输出--");
LinkedHashMap<String, String> lhsMap = new LinkedHashMap<String, String>();
lhsMap.put("3", "Value3");
lhsMap.put("1", "Value1");
lhsMap.put("2", "Value2");
lhsMap.put("b", "ValueB");
lhsMap.put("a", "ValueA");
Iterator lit = lhsMap.entrySet().iterator();
while (lit.hasNext()) {
Map.Entry e = (Map.Entry) lit.next();
System.out.println("Key: " + e.getKey() + "--Value: "
+ e.getValue());
}
}
}