Collection及其子类
Collection(集合)接口概述
只能存放引用类型
集合的顶层接口,不能被实例化
常用的子接口
1、List(有序可重复集合)
实现类:ArrayList、LinkedList、Vector
2、Set(无序无重复集合)
实现类:HashSet、TreeSet
List子类的特点:
ArrayList:
1、底层数据结构是数组,查询快、增删慢
2、线程不安全,效率高
Vector:
1、底层数据结构是数组,查询快,增删慢
2、 线程安全,效率低,所有很少使用
LinkedList:
1、底层数据结构是链表,查询慢,增删快
2、 线程不安全,效率高
Set子类的特点:
HashSet:
1、不保证set的迭代顺序,
2、当存储对象时需要重写equals()和hashCode()方法
TreeSet:
3、 针对Collection集合我们应该怎么使用
是否元素唯一
1、 是:Set
1. 是否排序
a) 是:TreeSet
b) 否:HashSet
如果不知道用哪个Set就用HashSet
2、否:List
1. 是否对安全性有要求
a) 是:Vector
b) 否:
查询多:ArrayList
增删多:LinkedList
如果不知道用哪个List用ArrayList
如果知道是用集合但不知道用哪个用ArrayList
Collection集合方法及迭代器:
boolean add(object element);向集合中添加元素
int size();获取集合中元素的个数
void clear();清空集合
boolean isEmpty();判断集合中是否有元素
Object[] toArray();将集合转换成数组
boolean contains(Object o);判断集合中是否包含某个元素
boolean remove(Object o);删除集合中某个元素
Iterator iterator();获取集合所依赖的迭代器对象
代码演示:
Collection collection=new ArrayList();
collection.add("123");
collection.add(1);//JDK5.0版本之后自动装箱
collection.add("java");
System.out.println(collection.size());//获取元素的个数——>3
System.out.println(collection.isEmpty());//判断集合是否为空——>false
System.out.println(collection.contains("java"));//判断集合中是否包含某个元素——>true
System.out.println("-------------------");
//迭代器遍历
Iterator iterator=collection.iterator();
while(iterator.hasNext()) {
//向下转型
Object s = iterator.next();
System.out.println(s);
}
System.out.println("-------------------");
//将集合转换成数组
Object[] array = collection.toArray();
for (int i=0;i<array.length;i++){
System.out.println(array[i]);
}
System.out.println("-------------------");
collection.remove(1);
System.out.println(collection.size());//——>2
collection.clear();清空集合
System.out.println(collection.isEmpty());//——>true
System.out.println(collection);
结果展示:
3
false
true
-------------------
123
1
java
-------------------
123
1
java
-------------------
2
true
[]
List(有序可重复集合)ArrayList集合方法及迭代器:
代码演示:
//List集合的遍历
List list=new ArrayList();
list.add(0,"123");
list.add(1,"1");
list.add(1,"java");//在指定列表指定位置插入元素
list.add("123");
System.out.println(list);//——>[123, java, 1, 123]
ListIterator iterator=list.listIterator();//ListIterator是list集合的迭代器
//后向遍历
while(iterator.hasNext()) {
String s=(String)iterator.next();
System.out.println(s);
}
System.out.println("-----------------");
//前向遍历
while(iterator.hasPrevious()) {
String s=(String)iterator.previous();
System.out.println(s);
}
System.out.println("-----------------");
//get方法遍历
for(int x=0;x<list.size();x++) {
String s=(String)list.get(x);
System.out.println(s);
}
System.out.println("-----------------");
//增强for循环遍历
for (Object o:list) {
System.out.println(o);
}
结果展示:
[123, java, 1, 123]
123
java
1
123
-----------------
123
1
java
123
-----------------
123
java
1
123
-----------------
123
java
1
123
Set(无序无重复集合)
Set(无序无重复集合)HashSet
代码演示:
// Set集合遍历
Set hashSet = new HashSet();
hashSet.add(1);
hashSet.add("123");
hashSet.add(new Integer(111));
hashSet.add(new Object());
hashSet.add("123");
System.out.println(hashSet.size());//——>3
System.out.println(hashSet);//——>[1, java.lang.Object@78308db1, 123]
//迭代器遍历
Iterator iterator = hashSet.iterator();
System.out.println("-----------------");
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
结果展示:
4
[1, java.lang.Object@78308db1, 123, 111]
-----------------
1
java.lang.Object@78308db1
123
111
Set(无序无重复集合)TreeSet
代码演示:
/*TreeSet的数据结构是一个二叉树
被存储元素实现了Comparator接口,实现了compare方法
TreeSet集合中在添加元素的时候,默认会调用被存储元素的compare方法完成比较!
若添加元素本身不具备可比较性可采用比较器比较*/
//TreeSet自然排序
SortedSet treeSet=new TreeSet();
treeSet.add(56);
treeSet.add(45);
treeSet.add(98);
treeSet.add(2);
treeSet.add(25);
System.out.println(treeSet);//——>[2, 25, 45, 56, 98]
Iterator iterator = treeSet.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
结果展示:
[2, 25, 45, 56, 98]
2
25
45
56
98