java集合框架
1,list接口实现类:
list集合(可以出现重复的元素)
ArrayList:底层是数组结构,查询快,插入慢。
LinkedList:底层是链表结构,查询慢,插入快。
2,Set接口实现类:
Set集合(不能出现重复的元素)
HashSet:底层是HashMap:哈希表(散列表)
*在使用此类存储自定义的类的时候,需要在自定义类中重写,equals()和HashCode()方法。
TreeSet:底层是TreeMap:红黑树
*在使用此类存储自定义的类的时候,自定义类需要实现Comparable接口,并重写Comparable接口中的CompareTo()方法
例如:
//自定义类
class Stu implements Comparable<Stu>{
private int age;
Stu(int age){
this.age = age;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
//重写compareTo()方法
@Override
public int compareTo(Stu o1){
if(o1.getAge()>this.getAge()){
return 1;
}else if(o1.getAge()<this.getAge()){
return -1;
}
return 0;
}
//重写toString()方法
@Override
public String toString() {
return "Stu{" +
"age=" + age +
'}';
}
}
//这样再把此类存储到TreeSet集合中时,就会调用重写的CompareTo()方法从而不会出现cannot be cast to java.lang.Comparable异常了
*或者在实例化TreeSet类的时候向其中传入自己实现的比较器类Comparator,并重写其中的Comparator()方法。
例如:
//自定义类
class Stu{
private String name;
Stu(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
//重写toString()方法
@Override
public String toString() {
return "Stu{" +
"name='" + name + '\'' +
'}';
}
}
//比较器类
class MyComparator implements Comparator<Stu>{
@Override
public int compare(Stu o1,Stu o2){
//因为String类中存在已经写好的compareTo()方法所以直接调用
return o1.getName().compareTo(o2.getName());
}
}
//在实例化构造TreeSet类的时候,将比较器实例化并传入其中,这样就不会出现cannot be cast to java.lang.Comparable异常
TreeMap<Stu,Integer> m2 = new TreeMap<Stu,Integer>(new MyComparator());
3,Map接口实现类:
HashMap:底层是哈希表(散列表)【线程非同步】若想要使用线程同步的可以选择使用HashTable。
*在使用此类存储自定义的类的时候,需要在自定义类中重写,equals()和HashCode()方法。
TreeMap:底层是红黑树
*在使用此类存储自定义的类的时候,自定义类需要实现Comparable接口,并重写Comparable接口中的CompareTo()方法,或者在实例化TreeSet类的时候向其中传入自己实现的比较器类Comparator,并重写其中的Comparator()方法。
——————————未完待续——————————————————