Set集合
Set集合存放无序不可重复的元素
List集合存放有序可重复的元素
Set集合不按照特定方式进行排序,只是放元素放在集合
Set主要是由HashSet和TreeSet具体实现类实现
HashSet
Hash(哈希算法)——哈希函数定义的好坏
HashCode——哈希值
- equals()方法判断两个元素的HashCode值是否相同
- 如果HashCode值相同,继续与集合的元素作比较
- 如果还相同,则视为同一个对象,不保存在HashSet中
- 如果对象不相同,理论上要存储(比较麻烦)——避免发生
- 如果HashCode值不相同,直接把元素存放在该元素的HashCode位置
初始化
HashSet<E> hs = new HashSet<E>();
常用方法
boolean add(E e) #如果没有已存在,则将指定的元素添加到该集合中
boolean contains(Object o) #如果这套 true返回包含指定的元素
TreeSet
TreeSet是一个有序集合,默认将元素按照升序排列
构造方法
TreeSet() #构造一个新的、空的树集,根据其元素的自然排序进行排序
TreeSet(Collection<? extends E> c) #构造一个新的树集包含在指定集合的元素,根据其元素的自然排序排序
TreeSet(Comparator<? super E> comparator) #构造一个新的、空的树集,根据指定的比较器进行排序
常用方法
E ceiling(E e) #返回最小的元素在这组大于或等于给定的元素,或 null如果没有这样的元素
E first() #返回当前在该集合中的第一个(最低的)元素
E floor(E e) #返回最大的元素在这组小于或等于给定的元素,或 null如果没有这样的元素
E higher(E e) #返回最小的元素在这套严格大于给定的元素,或 null如果没有这样的元素
E last() #返回当前在该集合中的最后(最高)元素
E lower(E e) #返回最大的元素在这套严格小于给定的元素,或 null如果没有这样的元素
E pollFirst() #检索并移除第一(最低)的元素,或返回 null如果这集是空的
E pollLast() #检索和删除最后(最高)的元素,或返回 null如果这集是空的
实现TreeSet(排序)
方法一:实现Comparator接口
Person类
package com.TreeSet.util;
import java.util.Comparator;
/*
* @author Administrator
* @version 1.0
*/
public class Person implements Comparator<Person>{
//定义成员变量
private int age;
private String name;
//无参构造方法
public Person(){
}
//有参构造方法
public Person(int age, String name){
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compare(Person p1, Person p2){
if (p1.age > p2.age){
return 1;
}
else if (p1.age < p2.age){
return -1;
}
else {
return 0;
}
}
@Override
public String toString(){
return "[" + this.age + "," + this.name + "]";
}
}
TreeSetDemo类
package com.TreeSet.util;
import java.util.TreeSet;
/*
* @author Administrator
* @version 1.0
*/
public class TreeSetDemo {
//主函数
public static void main(String[] args) {
//实例化TreeSet的对象
TreeSet<Person> ts = new TreeSet<Person>(new Person());
System.out.println(ts.add(new Person(27, "张三"))); //true
System.out.println(ts.add(new Person(6, "吴一"))); //true
System.out.println(ts.add(new Person(15, "刘二"))); //true
//遍历
for (Person person : ts){
System.out.println(person);
/*
* [6,吴一]
* [15,刘二]
* [27,张三]
*/
}
}
}
方法二:指定比较器Comparator(匿名内部类)
Person类
package com.TreeSet.util;
/*
* @author Administrator
* @version 1.0
*/
public class Person {
//定义成员变量
private int age;
private String name;
//无参构造方法
public Person(){
}
//有参构造方法
public Person(int age, String name){
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString(){
return "[" + this.age + "," + this.name + "]";
}
}
TreeSetDemo类
package com.TreeSet.util;
import java.util.Comparator;
import java.util.TreeSet;
/*
* @author Administrator
* @version 1.0
*/
public class TreeSetDemo {
//主函数
public static void main(String[] args){
//实例化TreeSet的对象
TreeSet<Person> ts = new TreeSet<Person>(new Comparator<Person>() {
@Override
//匿名内部类
public int compare(Person o1, Person o2) {
if (o1.getAge() > o2.getAge()){
return 1;
}
else if (o1.getAge() < o2.getAge()){
return -1;
}
else {
return 0;
}
}
});
System.out.println(ts.add(new Person(15, "刘二"))); //true
System.out.println(ts.add(new Person(27, "张三"))); //true
System.out.println(ts.add(new Person(6, "吴一"))); //true
//遍历
for (Person person : ts){
System.out.println(person);
}
/*
* [6,吴一]
* [15,刘二]
* [27,张三]
*/
}
}