//说明:要求添加进Set中的元素所在的类,一定要重写equals()和hashcode()方法。进而保证set中元素的不可重复性!
//>要求:hashcode()方法要与equals()方法一致。
public class TestSet{
@Test
public void testHashSet(){
Set set = new HashSet();
set.add(123);
set.add(456);
set.add(new String("AA"));
set.add(new String("AA"));//若此时在这里加上相同元素,则加不进去。
set.add("BB");
set.add(null);
System.out.println(set.size());
System.out.println(set);
}
}
/*
*LinkedHashSet:使用链表维护了一个添加进集合中的顺序,导致当我们遍历LinkedHashSet集合元素是按照
*添加进去的顺序遍历的!但是存储是无序的!
*LinkedHashSet得插入性能略低于HashSet,但在迭代访问Set里的全部元素时有很好的性能。
*LinkedHashSet不允许集合元素重复。
*/
public class TestLinkedHashSet{
@Test
public void testLinkedHashSet(){
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);
System.out.println(set.size());
System.out.println(set);
//迭代器去遍历
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
输出为:123,456,AA,BB,null
/*
*1.向TreeSet中添加的元素必须是同一个类的
*2.可以按照添加进集合中的元素的指定的顺序遍历,像String,包装类等默认按照从小到大的顺序遍历
*3.当向TressSet中添加自定义类的对象时,有两种排序方法:①自然排序②定制排序
*4.自然排序:要求自定义类实现java.lang.Comparable接口并重写其compareTo(Object obj)
在此方法中,指明按照自定义类额哪个属性进行排序。
*5.向TreeSet中添加元素时,首先按照compareTo()进行比较,一旦返回0,虽然仅是两个对象的子属性值相同, 但是程序会认为这两个对象是相同的,进而后一个对象就不能添加进来。
*>compartTo()与hashCode();以及equals()三者保持一致!
*/
False:
public class TestTreeSet{
//这样添加会报出一个CastException,会出现异常
@Test
public void testTreeSet(){
Set set = new TreeSet();
set.add(123);
set.add(456);
set.add(new String("AA"));
set.add(new String("AA"));
set.add("BB");
}
}
True:
public class TestTreeSet{
@Test
public void testTreeSet(){
Set set = new TreeSet();
// set.add(new String("AA"));
// set.add(new String("AA"));//相同的元素没有进去
// set.add("JJ");
// set.add("GG");
// set.add("MM");
//String没有报错是以为String类型实现了Comparable接口,已经重写好了排序的方法
//当Person类没有实现Comparable接口时,当向TreeSet中添加Person对象时,报 //ClassCastException
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("KK",20));//新加一个KK,但是age相同
set.add(new Person("DD",20));
for(Object str : set){
System.out.println(str);
}
}
}
输出为AA,GG,JJ,MM
//当向TreeSet中添加Person类的对象时,依据此方法,确定按照哪个属性排列。
//需要重写compareTo方法
//Person(name,age,get/set方法,空构造器,toString,equals,hashCode)
@Override
public int compareTo(Object o){
if(o instanceof Person){
Person p = (Person)o;
// return this.name.compareTo(p.name); 从小往大排
// return -this.name.compareTo(p.name); 从大往小排
int i = this.age.compareTo(p.age);
if(i == 0){
return this.name.compareTo(p.name);
}else{
return i ;
}
}
return 0;
}
//定制排序
//Customer(name,id,get/set方法,空构造器,toString,equals,hashCode)
public class TestTreeSet{
@Test
public void testTreeSet2(){
//1.创建一个实现了Comparator接口的类对象
Comparator com = new Comparator(){
//
@Override
public int compare(Object o1,Object o2){
if(o1 instanceof Customer && o2 instanceof Customer){
Customer c1 = (Customer)o1;
Customer c2 = (Customer)o2;
int i = c1.getId().compareTo(c2.getId());
if(i == 0){
return c1.getName().compareTo(c2.getName());
}
return i;
}
return 0;
}
};
//2.将此对象作为形参传递给TreeSet的构造器中
TreeSet set = new TreeSet(com);
//3.向TreeSet中添加Comparator接口中的compare方法中涉及的类的对象
set.add(new Customer("AA",1003));
set.add(new Customer("BB",1002));
set.add(new Customer("GG",1004));
set.add(new Customer("CC",1001));
set.add(new Customer("DD",1001));
for(Object str : set){
System.out.println(str);
}
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有