集合set
包括HashSet、LinkedHashSet、TreeSet,都不是线程安全的
HashSet
- 底层数据结构:哈希表(无序,唯一)
- 查询效率:高
- 保证元素唯一性的方式:equals()方法返回true,hashCode()方法返回相同值时判定相同
- 允许存在null数据
LinkedHashSet
- 底层数据结构:链表和哈希表(FIFO插入,有序,唯一)
- 查询效率:低于HashSet
- 主要功能:用于保证集合的有序
- 保证元素有序的方式:链表
- 保证元素唯一的方式:哈希表
- 允许存在null数据
TreeSet
- 底层数据结构:红黑树(唯一、有序)
- 查询效率:最慢
- 主要功能:用于排序
- 保证元素有序的方式:自然排序、比较器排序
- 保证元素唯一的方式:根据比较的返回值是否为0
- 不允许存在null数据,必须放入同样类的对象
HashSet的使用
public class TestHashSet {
public static void main(String[] args) {
HashSet<Fruit> set=new HashSet<>();
Fruit apple=new Fruit(10);
Fruit banana=new Fruit(4);
Fruit pear=new Fruit(8);
Fruit strawberry=new Fruit(39);
Fruit blueberry=new Fruit(36);
set.add(apple);
set.add(banana);
set.add(pear);
set.add(strawberry);
set.add(blueberry);
Iterator<Fruit> fruits=set.iterator();
while(fruits.hasNext())
System.out.print(fruits.next());
}
}
class Fruit{
int price;
public Fruit(int price) {
this.price=price;
}
public String toString() {
return price+" ";
}
}
输出(乱序输出):
LinkedHashSet
public class TestLinkedHashSet {
public static void main(String[] args) {
LinkedHashSet<Fruit> set=new LinkedHashSet<>();
Fruit apple=new Fruit(10);
Fruit banana=new Fruit(4);
Fruit pear=new Fruit(8);
Fruit strawberry=new Fruit(39);
Fruit blueberry=new Fruit(36);
set.add(apple);
set.add(banana);
set.add(pear);
set.add(strawberry);
set.add(blueberry);
Iterator<Fruit> fruits=set.iterator();
while(fruits.hasNext())
System.out.print(fruits.next());
}
}
class Fruit{
int price;
public Fruit(int price) {
this.price=price;
}
public String toString() {
return price+" ";
}
}
输出:(按照加入set的顺序输出)