容器的长度可以变化。
Collection(I) Map(I)
Set(I) List(I)
HashSet(C) ArrayList(C) LinkedList(C)
**:I=Interface C=Class
Set(集合) :无序(无索引),唯一。
List(列表):有序,可重复。
List比Set多了索引,在指定索引位置插入数据;查找指定索引上的数据;删除指定索引上的数据;退换指定索引上的数据。
ArrayList:查快改慢
LinkedList:改快查慢
容器的迭代
容器的迭代必须使用迭代器完成
Iterator接口
每个实现了Collection接口的类都能通过iterator方法来获得此容器的迭代器。
只有Iterator中的remove()方法才是迭代过程中最安全的删除方法,因为加了锁。
Collections类提供了一系列的方法对list进行操作。
comparable接口
一个类的对象如果需要比较大小顺序,必须实现次接口。
class Person implements Comparable{
public Person(String name,int age){
this.name = name;
this.age = age;
}
String name;
int age;
public String toString(){
return "name:"+name+" age:"+age;
}
public int compareTo(Object o){
Person p = null;
//判断一个对象是不是一个类或这个类子类的对象
if(o instanceof Person){
p = (Person)o;
if(this.age>p.age){
return 1;
}else if{
return -1;
}else{
return 0;
}
}else{
return -1;
}
}
}
1.增强的for循环,就是.net中的forEach;
增强的for循环在迭代容器的时候内部依然使用迭代器;
增强的for循环只能做简单的遍历
2.泛型
1)普通的容器可以放任意数据类型,没有意义。
2)在拿出容器元素的时候都是Object,要向下转型。
自定义泛型
泛型中不存在父类引用指向子类对象的概念的。
import java.util.*
public class Test{
public static void main(String[] args){
List<Integer> i1 = new ArrayList<Integer>();
i1.add(10);
i1.add(20);
List<Double> i2 = new ArrayList<Double>();
i2.add(10.1);
i2.add(10.2);
m(i1);
m(i2);
}
//自定义了一种类型,这个类型的名字叫T
//在当前方法中出现T的只要数据类型保持一致就可以了
public static <T> void m(List<T> t){
for(T i;list){
System.out.println(i);
}
}
}