Ø
在
Collection
接口下又有另外一个比较常用的子接口为
Set
子接口,但是
Set
子接口并不像
List
子接口那样对于
Collection
接口进行了大量的扩充,而是简单的继承了
Collection
接口。也就是说在
Set
子接口里面是无法使用
get()
方法根据索引取得保存数据的操作。在
Set
子接口下有两个常用的子类:
HashSet
、
TreeSet
。
HashSet子类的特点
import java.util.HashSet;
import java.util.Set;
public class TestDemo {
public static void main(String[] args) {
Set<String> all = new HashSet<String>(); // 实例化Set接口
all.add("q"); // 保存数据
all.add("w"); // 保存数据
all.add("e"); // 保存数据
all.add("e"); // 重复数据
System.out.println(all); // 直接输出集合
}
}
程序执行结果:
[q,w,e]
使用TreeSet子类
import java.util.Set;
import java.util.TreeSet;
public class TestDemo {
public static void main(String[] args) {
Set<String> all = new TreeSet<String>(); // 实例化Set接口
all.add("q"); // 保存数据
all.add("w"); // 保存数据
all.add("e"); // 保存数据
all.add("e"); // 重复数据
System.out.println(all); // 直接输出集合
}
}
程序执行结果:
[q,w,e]
关于数据排序的说明
TreeSet
子类保存的内容可以进行排序,但是其排序的依据是依据比较器接口(
Comparable
)实现的,即,如果现在要想利用
TreeSet
子类保存任意类的对象,那么该对象所在的类必须要实现
java.lang.Comparable
接口。
关于重复元素的说明
TreeSet
利用
Comparable
接口实现重复元素的判断,但是这样的操作只适合于支持排序类集操作环境下。而其他的子类(例如:
HashSet
)如果要想消除重复元素,则必须依靠
Object
类中所提供的两个方法:
取得哈希码:
public
int
hashCode
()
;
先判断对象的哈希码是否相同,依靠哈希码取得一个对象的内容;
对象比较:
public
boolean
equals(Object
obj
)
。
再将对象的属性进行依次的比较。