Collection(接口)
Collection中的方法:
- add(x)(添加x元素)
- remove(x)(移除x元素)
- clear()(移除所有元素)
- size()(查看集合的元素个数)
- isEmpty()(查看集合是否为空)
- contains(x)(查看集合是否包含x元素)
- iterator()(获得迭代器)
Collection是List和Set的接口所以Collection中的方法,List和Set都可以使用。
Collection c1 = new ArrayList();
c1.add(1);//添加元素
c1.add(2);
System.out.println(c1.size());//2 查看集合中元素的个数
c1.clear();//移除所有元素
System.out.println(c1.size());//0
c1.add(3);
c1.add(4);
c1.remove(1);//移除集合中值为1的元素
System.out.println(c1.size());//2 集合中没有1所以还是2个元素
c1.add(5);
c1.add(6);
System.out.println(c1.contains(1));//false 集合中不包含1所以是false
System.out.println(c1.isEmpty());//false 集合中有元素所以是false
//迭代获取集合中所有元素
Iterator iterator = c1.iterator();//获取迭代器,通过迭代器获取元素
while (iterator.hasNext()){
System.out.println(iterator.next());
}
List
特点:
有序:存放进去的顺序和取出来的顺序一致,有序是因为List的集合有下标,从0开始,以1递增。
可重复:可以存放相同的元素。
List方法
- set(i,x)(把下标为i的元素修改成x)
- get(i)(获取下标为i的元素)
- remove(i)(移除下标为i的元素)
List list=new ArrayList();
list.add(1);//在集合的末尾添加元素
list.add(2);
list.add(3);
list.add(3);//List是可重复的,可以添加重复的元素
list.add(4);
list.set(1,"lisi");//修改下标为1的元素
System.out.println(list.get(1));//获取下标为1的元素
System.out.println("============");
//迭代
Iterator iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
list.remove("1");//移除字符串1的元素,没有所以集合不变
list.remove(1);//移除下标是1的元素,把lisi移除
//因为List有索引,所以还可以通过索引来遍历集合
System.out.println("=============");
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
//1
//3
//3
//4
}
//foreach(增强for循环)遍历集合
for(Object i:list){
System.out.println(i);
}
ArrayList
默认初始长度为10,每次扩容1.5倍。
底层是数组,线程不安全。
Collections中有个synchronizedList()方法,可以把ArrayList变成线程安全的。
数组优点:查询快,有索引,通过数学运算可以直接算出元素位置。
数组缺点:增删慢,需要移动大量元素。
LinkedList
底层是双向链表,线程不安全。
链表优点:增删快,不涉及到大量元素位移。
链表缺点:查询慢,每一次查找某个元素都要从头节点开始往下遍历。
####Vector
底层是数组,线程安全。
Set
特点:
无序:存放进去的顺序和取出来的顺序不一定一致。
不可重复:不可以存放相同的元素。
Collection c1=new HashSet();
c1.add("A");
c1.add("B");
c1.add("C");
c1.add("D");
c1.add("E");
c1.add("F");
c1.add("G");
c1.add("Q");
c1.add("A");//Set是不可重复的,即使添加也获取不到两个A。
c1.add(1);
c1.remove("D");//移除值为D的元素
//获取迭代器,遍历集合
Iterator iterator = c1.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
//foreach(增强for循环)遍历集合
for(Object i:c1){
System.out.println(i);
}
//Set是无序的,存放的顺序和取出的顺序不一定一致
//A
//Q
//1
//B
//C
//E
//F
//G
HashSet
底层是HashMap中的key,HashSet在使用add方法是把值放在了HashMap的key中,HashMap的底层是哈希表。
TreeSet
底层是TreeMap中的key,TreeMap的底层是二叉树。
Set c1=new TreeSet();
c1.add("A");
c1.add("B");
c1.add("H");
c1.add("D");
c1.add("E");
c1.add("Z");
c1.add("G");
c1.add("Q");
c1.add("A");//Set是不可重复的,即使添加也获取不到两个A。
c1.remove("D");//移除值为D的元素
Iterator iterator = c1.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
//A
//B
//E
//G
//H
//Q
//Z
TreeSet可以按照元素的大小自动排序。