collection包含三种子类型:1.List 2.Set 3.Queue
List:ArrayList、LinkedList
ArrayList:查找效率高,插入删除效率低。有序(添加的顺序排序),可重复数据。该类也是非同步的,在多线程的情况下不要使用。
LinkedList:查找效率低,插入删除效率高,允许有null(空)元素。主要用于创建链表数据结构,该类没有同步方法,如果多个线程同时访问一个List,则必须自己实现访问同步,解决方法就是在创建List时候构造一个同步的List。
例如:LinkedList Listlist=Collections.synchronizedList(newLinkedList(...));
Set :HashSet、TreeSet
HashSet:该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。
TreeSet:可实现排序功能
Map:HashMap
HashMap:(key-value)key:不能重复,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。
遍历
1.遍历ArrayList
List<Integer> list=new ArrayList<Integer>();
list.add(2);
list.add(1);
list.add(5);
for (Integer i: list) {
System.out.println(i);
}
for(int i = 0;i<list.size();i++){
System.out.println(list.get(i));
}
//转换为array
Integer[] strArray = new Integer[list.size()];
list.toArray(strArray);
for(int i=0;i<strArray.length;i++){
System.out.println(strArray[i]);
}
//使用迭代器进行相关遍历
Iterator<String> ite=list.iterator();
while(ite.hasNext()){//判断下一个元素之后有值
System.out.println(ite.next());
}
2.遍历map
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a");
map.put("2", "c");
map.put("3", "n");
//第一种:普遍使用,二次取值
for (String key : map.keySet()) {
System.out.println("key = "+ key + " ===== value = " + map.get(key));
}
//第二种
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() + " ====== value= " + entry.getValue());
}
//第三种:推荐,尤其是容量大时
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " ======= value= " + entry.getValue());
}
//第四种 遍历value
for (String v : map.values()) {
System.out.println("value = " + v);
}
对于排序:
Collections.sort(list);//这里的list类型必须为 List<T>
//这里的sort(List<?>,new Comparator<?>()) 可自定义排序对象
Collections.sort(result, new Comparator<Record>() {
@Override
public int compare(Record o1, Record o2) {
return Integer.parseInt(o2.get("id").toString())- Integer.parseInt(o1.getStr("id").toString());
}
});