目录
Set
Set集合不允许增加重复数据,Set用的最多为HashSet。
常用方法:
方法 | 说明 |
---|---|
public boolean add(E e); | 增加数据 |
public boolean contains(Object o) | 查询数据 |
public boolean remove(Object o) | 删除指定数据 |
public int size() | 获取数据总个数 |
public void clear() | 清空数据 |
public static Set of() | 通过指定的内容创建set集合 |
//使用of创建的Set集合,数据不允许修改和重复
Set<Integer> setA = Set.of(1,2,3,4,5,6,7,8);
Set<Integer> setB = new HashSet<>();
Set<Integer> setC = new TreeSet<>();
Set<Integer> setD = new LinkedHashSet<>();
HashSet(散列存储)
在类中重写equals(比较对象数据)和hashCode(获取对象编码)可以解决重复数据的问题。
当使用无参构造时,HashSet默认容量为16,当存储的数据达到当前容量的75%时会自动扩容。
**实例:**HashSet的存储的数据不是有序的
Set<String> set = new HashSet<>();
set.add("1 java");
set.add("2 hello");
set.add("3 world");
set.add("4 ");
set.add("5");
System.out.println(set);
结果:
[1 java, 5, 3 world, 4 , 2 hello]
TreeSet(有序存储)
自动进行排序(从低到高)。
构造:
方法 | 说明 |
---|---|
public TreeSet() | 默认使用Comparable接口进行排序 |
public TreeSet(Comparator<? super E> comparator) | 可以指定使用Comparator接口进行排序 |
TreeSet排序示例:
Set<String> set = new TreeSet<>();
set.add("1 java");
set.add("4 ");
set.add("3 world");
set.add("2 hello");
set.add("5");
System.out.println(set);
结果:
[1 java, 2 hello, 3 world, 4 , 5]
使用TreeSet对对象数据进行排序时,根据Comparable接口排序数据因为一样被判定为重复,只能在相同时再判定其他数据是否相等,在数据多的情况下很麻烦,比如在50个数据情况下。
public int compareTo(Ball ball) {
if(this.price > ball.price){
return 1;
}else if(this.price < ball.price){
return -1;
}else {
return this.brand.compareTo(ball.brand); //判断生产时期是否相等
}
}