java---Set

来源:互联网 发布:阿里云对象存储oss 编辑:程序博客网 时间:2024/06/05 03:25
/*
 * Set:存储的元素是无序的,不可重复的
 * 1.无序性:无序性!=随机性
 * 2.不可重复性:当向Set中添加进相同的元素的时候。后面的这个不能添加进去
 * 说明:要求添加进Set中的元素所在的类,一定要重写equals()和hashCode方法,
 * 进而保证Set中元素的不可重复性
 * 
 * Set中的元素是如何存储的?使用了哈希算法
 */
public class TestSet {


@Test
public void test(){
Set set = new HashSet();
set.add(123);
set.add(456);
set.add("AA");
set.add("BB");
set.add(null);
System.out.println(set.size());
System.out.println(set);

Person p1 = new Person("GG",23);
Person p2 = new Person("GG",21);
System.out.println(p1.equals(p2));
System.out.println(p1.hashCode());
System.out.println(p2.hashCode());
set.add(p1);
set.add(p2);
System.out.println(set.size());

}
/*
* LinkedHashSet:使用链表维护了一个添加进集合中的顺序
* 导致当我们遍历LinkedHashSet集合元素时,是按照添加进去的顺序遍历的


*/
@Test
public void test1(){
Set set = new LinkedHashSet();
set.add(123);
set.add(456);
set.add(new String("AA"));
set.add(new String("AA"));
set.add("BB");
set.add(null);

Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}


}
/*
* TreeSet:
* 1.向TreeSet中添加的元素必须是同一类型的
* 2.可以按照添加进集合中的元素的指定的顺序遍历。
* 像String,包装类等,默认按照从小到大的顺序遍历
* 3.当向TreeSet中添加自定义类的对象时,有两种排序方法:
* (1)自然排序
* (2)定制排序
* 4.自然排序:要求自定义类实现java.lang.ComParable接口
* 并重写其compareTo(Object)


*/
@Test
public void  test2(){
Set set = new TreeSet();
// set.add(123);
// set.add(456);
// set.add(new String("AA"));
// set.add(new String("AA"));
// set.add("BB");
// set.add("DD");
// set.add("CC");
//当Person类没有实现Comparable接口时,当向TreeSet添加Person对象时
set.add(new Person("CC",23));
set.add(new Person("MM",21));
set.add(new Person("GG",25));
set.add(new Person("JJ",24));
set.add(new Person("DD",20));
// set.add("AA");

for (Object str : set) {
System.out.println(str);
}

}
@Test
/*
* TreeSet的定义排序
*/
public void test3(){
Comparator com = new Comparator() {
//向TreeSet中添加Customer类的对象,在此方法中,指明是按照Customer哪个属性排序的
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Customer && o2 instanceof Customer){
Customer c1 = (Customer)o1;
Customer c2 = (Customer)o2;
return c1.getName().compareTo(c2.getName());
}
return 0;
}
};
//2.将此对象作为形参传递给TreeSet的构造器中
TreeSet set = new TreeSet(com);
//3.向TreeSet中添加Comparator接口中的compare方法中涉及的类的对象
set.add(new Customer("AA",1003));
set.add(new Customer("BB",1001));
set.add(new Customer("JJ",1005));
set.add(new Customer("DD",1007));
set.add(new Customer("GG",1001));
for (Object o : set) {
System.out.println(o);
}
}
原创粉丝点击