Collection<--List<--Vector
Collection<--List<--ArrayListCollection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
Map<--SortedMap<--TreeMap
Map<--HashMap
list和Collection,set,map都是接口,可以声明变量,不可以实例化。
全部封装在java.util
2.各个集合的API及使用
2.1collection集合体系共性方法-ArrayList
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。可扩张50%。
import java.util.*;
public class Array_list {
public static void main(String[] args ){
ArrayList<String> al = new ArrayList<String>();
//增加
al.add("haha");
al.add("ge");
al.add("welcom");
al.add("this");
al.add("is");
al.add("police");
//迭代器输出
Iterator it = al.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//删除元素
al.remove(1);//下表删除
al.remove("welcom");//根据里面的值来删除
//输出
it = al.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//长度
System.out.println(al.size());
//查询
System.out.println(al.indexOf("is"));
System.out.println(al.indexOf("none"));
//是否为空
System.out.println(al.isEmpty());
}
}
2.2 Vector
Vector可以看作是基于数组的List,封装了数组所不具备的一些功能以方便使用。这也导致Vector无法避免数组的限制,性能也要逊于直接使用数组。值得注意的一点在于,Vector的方法中采用了synchronized进行同步,因此Vector是线程安全的,不过同步也导致了效率的降低。
List v = new Vector<Integer>();
v.add(3);
v.add(14);
v.add(-1);
Iterator it = v.iterator();
while(it.hasNext()){
System.out.println(it.next());
2.3 LinkedList
顺序访问进行了优化,向List中间插入与删除得开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。
2.4 List 通用方法
List集合元素是有序的,元素可以重复,因为该集合体系有索引
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(from,to);
listIterator();
ArrayList listO = new ArrayList ();
listO.add("aa");
listO.add("bb");
ArrayList listT = new ArrayList ();
listT.add("cc");
listT.add("dd");
ArrayList listAll = new ArrayList ();
listT.addAll(2 , listO);//可取 0 ,1,2 代表位置
//listT.addAll(1,listO);
//迭代器输出 ,也可以用枚举,不流行
Iterator it = listT.iterator();
while(it.hasNext()){
System.out.println(it.next());
2.6 map
Map一次存一对元素,同时键值对的形式。键和值有对应关系。在java里面,虽然有hash字义,只表示他内部是用hash原理实现的,使用起来还是map或是set,使用其主要原因是提高性能。
HashMap<Integer,String> hm = new HashMap<Integer,String>();
//添加
hm.put(12,"zhangsan");
hm.put(2, "bug");
hm.put(2,"wangwu");
hm.put(6,"zhaoliu");
hm.put(4,"zhouqi");
//获取
System.out.println(hm.get(1));//不存在则返回null
System.out.println(hm.get(2));
//删除
System.out.println(hm.remove(0));//不存在则返回null
System.out.println(hm.remove(6));//返回存在的值
//判断是否存在
System.out.println(hm.containsKey(4));
Set<Integer> hmset = hm.keySet();
Iterator it = hmset.iterator();
while(it.hasNext()){
Object n = it.next();// 用Integer 错误
System.out.println(n);
System.out.println(hm.get(n));
}