Set集合

Collection几口的一个子接口, 拥有Collection接口所有的功能,存储数据有以下特点

  1. 不能存储重复的数据 (以equals方法判断两个数据是否重复)
  2. 存储的数据 是没有顺序的

Set接口下面有哪些常用的实现类 :
HashSet 、TreeSet、LinkedHashSet

1. 、HashSet

构造方法Set集合容器 - 图3

API 方法

public class TestHashSet {
public static void main(String[] args) {

Set nums = new HashSet<>();
nums.add(100);
nums.add(200);
nums.add(300);
nums.add(400);
nums.add(500);
nums.add(200);
nums.add(300);

System.out.println(“元素个数:”+nums.size());
for(Integer i :nums){
if(200 == i){
//nums.remove(i); //不能这么删除
}
System.out.print(i +” “);
}
System.out.println();
System.out.println(nums.contains(200));

Iterator iterator = nums.iterator();
while(iterator.hasNext()){
Integer next = iterator.next();
System.out.print(next +” “) ;
}
System.out.println();

List list = new ArrayList<>();
list.add(“a”);
list.add(“b”);
list.add(“c”);
list.add(“b”);

Set sets = new HashSet<>(list);
System.out.println(sets);
}
}public class TestHashSet01 {
public static void main(String[] args) {
//如果去重 ,实体User中必须重写equals方法
Set users = new HashSet<>();
users.add(new User(“jim”,18));
users.add(new User(“tom”,18));
users.add(new User(“jim”,18));

System.out.println(users.size());

}
}

2 、TreeSet

实现了Set接口 ,但是他的特点 :1.不重复 2. 有序的(集合中的对象必须实现比较器
TreeSet 经过多重继承和实现 ,扩展的功能比较多 ,如果想使用它的所有的功能 ,在创建对象时,不能使用接口引用指向子类对象 (Set set = new TreeSet() )

构造方法Set集合容器 - 图4

API 方法

public class TestTreeSet {
public static void main(String[] args) {
TreeSet sets = new TreeSet<>();
sets.add(“a”);
sets.add(“f”);
sets.add(“t”);
sets.add(“b”);
sets.add(“k”);
sets.add(“e”);
sets.add(“a”);
System.out.println(sets.size());
//TreeSet的排序是按照 比较器的规则 记性排序输出 String 的比较器是按照ASCII的 升序 排序
for(String s : sets){
System.out.print(s + “ “);
}
System.out.println();
//降序输出 集合中的字符串 改变排序规则 但是又不可能重写 String的中比较器
//采用 TreeSet的构造方法 进行改变比较器
TreeSet strs = new TreeSet<>(new Comparator() {

  1. @Override<br /> public int compare(String o1, String o2) {<br /> // TODO Auto-generated method stub<br /> return -1*o1.compareTo(o2);<br /> }<br /> });<br /> strs.add("a");<br /> strs.add("f");<br /> strs.add("t");<br /> strs.add("b");<br /> strs.add("k");<br /> strs.add("e");<br /> strs.add("a");<br /> for(String s :strs){<br /> System.out.print(s + " ");<br /> }<br /> System.out.println();<br /> String ceiling = strs.ceiling("m");<br /> System.out.println(ceiling);<br /> <br /> }<br />}public class TestTreeSet2 {<br /> public static void main(String[] args) {<br /> TreeSet<String> sets = new TreeSet<>();<br /> sets.add("a");<br /> sets.add("f");<br /> sets.add("t");<br /> sets.add("b");<br /> sets.add("k");<br /> sets.add("e");<br /> sets.add("a");<br /> System.out.println(sets.size());<br /> //TreeSet的排序是按照 比较器的规则 记性排序输出 String 的比较器是按照ASCII的 升序 排序<br /> for(String s : sets){<br /> System.out.print(s + " ");<br /> }<br /> System.out.println();<br /> <br /> Iterator<String> iterator = sets.iterator();<br /> while(iterator.hasNext()){<br /> String next = iterator.next();<br /> System.out.print(next + " ");<br /> }<br /> System.out.println();<br /> <br /> //按照降序输出<br /> Iterator<String> descendingIterator = sets.descendingIterator();<br /> while(descendingIterator.hasNext()){<br /> String next = descendingIterator.next();<br /> System.out.print(next + " ");<br /> }<br /> <br /> }<br />}定义一个学生类 (Student): 属性 :name、score **TreeSet集合 ,存储的对象必须实现比较器 ,或者 在创建集合对象时 ,利用构造方法中传递一个比较器对象,因为TreeSet集合是利用比较器判断数据的大小或者是否相同**
  1. 创建5个学生对象 存储在集合(TreeSet)中 ,
  2. 按照成绩的降序输出学生信息
  3. 打印出最高学生的成绩成绩
  4. 打印出最低学生的成绩

    3 ,LinkedHashSet (了解)

    此集合中的数据也是有顺序的
    public class TestLinkedHashSet {
    public static void main(String[] args) {
    //存储数据时 四有顺序的 ,按照添加的顺序输出
    LinkedHashSet sets = new LinkedHashSet<>();
    sets.add(new User(“jim”,12));
    sets.add(new User(“tom”,20));
    sets.add(new User(“jack”,4));

    System.out.println(sets);
    }
    }