一.总体分类
- Collection(包括方法add,remove,contains,clear,size)
- List(接口)
LinkedList
ArrayList
Vector---Stack
2. Set
HashSet
TreeSet
- Map
- Hashtable---properties
- HashMap
- TreeMap
二.集合------Set(无序,不可重复)
无法获取索引位置,所以遍历时不能用for的普通方法,只能用增强for循环和迭代器。
HashSet hs=new HashSet();
1.HashSet
HashSet如何判断元素重复呢
- 对于每个Object,都有一个HashCode的方法,可以尽量保证每个对象的HashCode值不同
- 如果HashCode相同,再比较*.equlas()方法
- 如果1 2 都相同,则两元素相同
我们可以在Student类中重写HashCode和equals的方法
@override
public int hashCode(){
final int prime=31;//源码是定义一个素数用来做乘法
int result=1;
result=prime*result+age;
return result;
}
@override
public boolean equals(Object obj){
if(this==obj)
return true;
}
例子:谁发了邮件,一个人发了很多次,找谁给我发了邮件。(此时就用到了不重复的hashSet)
2.TreeSet
虽然也是不能重复,也是无序,但是TreeSet的无序是按照自然顺序排放的。并且数据类型必须相同。
- 字母:a b c字典顺序
- 数字:1 2 3 大小顺序
- 汉子:自己有自己的想法
- 类:需要这个类实现Comparable接口或者自定义比较器。
TreeSet ts=new TreeSet();
方法一:类继承Comparable接口
@override
public int compareTo(Object o){
Student s=(Student)o;
return s.age-age;
}
//当前类属性-参数类属性------升序,反之,降序
@override
public String toString(){
return "fsadjnfaake";
}
方法二:用匿名内部类的方式,重写接口的方法
Comparator c=new Comparator(){
@override
public int compare(Object o1,Object o2){
Student s1=(Student)o1;
Student s2=(Student)o2;
return s1.getAge()-s2.getAge();
}
}