Set集合
Collection几口的一个子接口, 拥有Collection接口所有的功能,存储数据有以下特点:
- 不能存储重复的数据 (以equals方法判断两个数据是否重复)
- 存储的数据 是没有顺序的
Set接口下面有哪些常用的实现类 :
HashSet 、TreeSet、LinkedHashSet
1. 、HashSet
构造方法
API 方法
public class TestHashSet {
public static void main(String[] args) {
Set
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
while(iterator.hasNext()){
Integer next = iterator.next();
System.out.print(next +” “) ;
}
System.out.println();
List
list.add(“a”);
list.add(“b”);
list.add(“c”);
list.add(“b”);
Set
System.out.println(sets);
}
}public class TestHashSet01 {
public static void main(String[] args) {
//如果去重 ,实体User中必须重写equals方法
Set
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() )
构造方法
API 方法
public class TestTreeSet {
public static void main(String[] args) {
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
@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集合是利用比较器判断数据的大小或者是否相同**
- 创建5个学生对象 存储在集合(TreeSet)中 ,
- 按照成绩的降序输出学生信息
- 打印出最高学生的成绩成绩
- 打印出最低学生的成绩
3 ,LinkedHashSet (了解)
此集合中的数据也是有顺序的
public class TestLinkedHashSet {
public static void main(String[] args) {
//存储数据时 四有顺序的 ,按照添加的顺序输出
LinkedHashSetsets = new LinkedHashSet<>();
sets.add(new User(“jim”,12));
sets.add(new User(“tom”,20));
sets.add(new User(“jack”,4));
System.out.println(sets);
}
}