类 Collections:集合操作(collection接口下的集合)的工具类。
Set接口
父接口Collection
:一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个null 元素。
实现类:
HashSet TreeSet
HashSet
:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用一个null 元素
无序存放,根据散列码保存。
对象存放到集合中执行顺序:
首先hashcode(); 进行判,如果相等就euqals()方法,不等就将对象保存到集合中。
TreeSet:
使用元素的自然顺序对元素进行排序,或者根据创建 set时提供的 Comparator 进行排序,具体取决于使用的构造方法。
对象有比较器:
内部比较器:类实现Comparable<Person>重写compareTo()方法
Eg:
publicclass Person implements Comparable<Person> {
private String name;
privateintage;
private String school;
public Person(String name,int age,String school) {
this.name = name;
this.age = age;
}
/**
* 根据age的升序排列
*/
@Override
publicint compareTo(Person o) {
System.out.println("compareTo:"+this.name+":"+(this.age-o.getAge())+":"+o.getName());
//return 0;//表示两个对象是同一个对象
returnthis.age-o.getAge();//表示两个对象
}
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
publicint getAge() {
returnage;
}
publicvoid setAge(int age) {
this.age = age;
}
}
外部比较器:
Eg:
publicclass MyCompare implements Comparator<Dog> {
/**
* 按age的升序排列
*/
@Override
publicint compare(Dog p1, Dog p2) {
System.out.println("out :compareTo:"+p1.getName()+":"+(p1.getAge()-p2.getAge())+":"+p2.getName());
return (p1.getAge()-p2.getAge());
}
}
publicclass Dog {
private String name;
privateintage;
public Dog(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
publicint getAge() {
returnage;
}
publicvoid setAge(int age) {
this.age = age;
}
}
publicstaticvoid main(String[] args) {
Set<Dog> ds = new TreeSet<Dog>(new MyCompare());
Dog d1 = new Dog("xiaohua", 9);
Dog d2 = new Dog("xiaohei", 8);
Dog d3 = new Dog("xiaobai", 7);
Dog d4 = new Dog("xiaohuauang", 6);
ds.add(d1);
ds.add(d2);
ds.add(d3);
ds.add(d4);
for(Dog d:ds){
System.out.println(d.getName()+":"+d.getAge());
}
}
Map(接口):
HashTable
Hashmap
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
HashTable:
Hashtable 一个键值对应集合,存入相同键后边存入元素会覆盖之前元素,它是一个线程安全且无序。不允许null键和null值。
HashMap:
HashMap一个键值对应集合,存入相同键后边存入元素会覆盖之前元素,它是一个非线程安全且无序。允许一个null键和多个null值。
比较list set map:
1. list set都是实现collection接口,map是一个根接口
2. list有序 set无序 map无序
3. list(arraylist,linkedlist,vector)可以存放重复元素
arraylist:顺序存储非线程安全的
linkedlist:双向链表非线程安全的
vector:顺序存储线程安全的
4. set(hashset,treeset)不能存放重复元素
hashset:先执行对象的hashcode方法,如果hashcode相等就执行equals方法,equals返回false存入,反之不存。Hashcode不相等就直接存入。
Treeset:需要内部比较器或者外部比较器
内部比较器:对象类型必须实现comparable接口实现compareto方法
外部比较器:自定义比较器:实现comparator接口实现compare方法
Set<Dog> ds = new TreeSet<Dog>(new 自定义比较器());
5. map(hashtable,hashmap):键值对应的
hashtable: 一个键值对应集合,存入相同键后边存入元素会覆盖之前元素,它是一个线程安全且无序。不允许null键和null值。
HashMap:一个键值对应集合,存入相同键后边存入元素会覆盖之前元素,它是一个非线程安全且无序。允许一个null键和多个null值。