Java集合类02

TreeSet:

 可以对Set集合中的元素进行排序。

---排序时,当主要条件相同时,一定要判断次要条件。

---底层数据结构是二叉树。

---保证元素唯一性的依据:compareTo方法 return 0;

1.       TreeSet排序的第一种方式让元素自身具备比较性

需实现comparable接口,覆盖compareTo方法,亦即元素的自然顺序。

程序示例:

import java.util.*;

classFamilyMember implements Comparable//实现该接口,让对象具备可比性

{

                                                             privateString name;

                                                             privateint age;

                                                             FamilyMember(Stringname, int age)

                                                             {

                                                               this.name= name;

                                                               this.age= age;

                                                             }

                                                             publicint compareTo(Object obj)

                                                             {

                                                               /*

                                                               if(!(objinstanceof FamilyMember))

                                                                        thrownew RuntimeException("对象类型错误");

                                                               FamilyMemberfamilym = (FamilyMember)obj;

                                                               if(this.age> familym.age)

                                                                        return1;

                                                               if(this.age== familym.age)

                                                               {

                                                                        returnthis.name.compareTo(familym.name);

                                                               }

                                                               return-1;

                                                               */

                                                               return0;//返回 1是正序,返回 -1 是逆序,返回 0唯一元素

                                                             }

                                                             publicString getName()

                                                             {

                                                               returnname;

                                                             }

                                                             publicint getAge()

                                                             {

                                                               returnage;

                                                             }

}

publicclass TreeSetDemo

{

                                                             publicstatic void treeSet_Basic()

                                                             {

                                                               TreeSettreeSet = new TreeSet();

                                                               treeSet.add("ff");

                                                               treeSet.add("bb");

                                                               treeSet.add("hh");

                                                               for(Iteratoriter = treeSet.iterator(); iter.hasNext(); )

                                                               {

                                                                        System.out.println("---->"+ iter.next());

                                                               }

                                                             }

public staticvoid treeSet_Advanced()

                                                             {

                                                               TreeSettreeSet = new TreeSet();

                                                               treeSet.add(newFamilyMember("hh", 22));

                                                               treeSet.add(newFamilyMember("bb", 1));

                                                               treeSet.add(newFamilyMember("bbmm", 22));

                                                               treeSet.add(newFamilyMember("bbbb", 23));

                                                               for(Iteratoriter = treeSet.iterator(); iter.hasNext(); )

                                                               {

                                                                        FamilyMemberfm = (FamilyMember)iter.next();

                                                                        System.out.println(fm.getName()+ "--->" + fm.getAge());

                                                               }

                                                             }

                                                             publicstatic void main(String[] args)

                                                             {

                                                               //treeSet_Basic();

                                                               treeSet_Advanced();

                                                             }

}

2.       TreeSet排序的第二种方式:让容器具备比较性

         当元素自身不具备比较性,或者具备的比较性不是我们所需要的

         这时需要让容器自身具备比较性。

         定义一个比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。

方法:定义一个类(比较器),实现Comparator接口,覆盖compare方法

程序示例:

importjava.util.*;

classMyComparator implements Comparator//定义一个类实现比较器接口

{

         public int compare(Object obj1, Objectobj2)

         {

                   FamilyMember fm1 =(FamilyMember)obj1;

                   FamilyMember fm2 =(FamilyMember)obj2;

                   //比较处理一定要充分考虑程序的健壮性

                   int result =fm1.getName().compareTo(fm2.getName());//compareTo返回一个整数

                   if(0 == result)

                   {

                            if(fm1.getAge() >fm2.getAge())

                                     return 1;

                            if(fm1.getAge() ==fm2.getAge())

                                     return 0;

                            return -1;

                   }

                   return result;

         }

}

classFamilyMember

{

         private String name;

         private int age;

         FamilyMember(String name, int age)

         {

                   this.name = name;

                   this.age = age;

         }

         /*

         public int compareTo(Object obj)

         {

                   if(!(obj instanceof FamilyMember))

                            throw newRuntimeException("对象类型错误");

                   FamilyMember familym =(FamilyMember)obj;

                   if(this.age > familym.age)

                            return 1;

                   if(this.age == familym.age)

                   {

                            returnthis.name.compareTo(familym.name);

                   }

                   return -1;

                  

                   //自然顺序 return0;返回 1 是正序,返回 -1是逆序,返回 0 唯一元素

         }

         */

         public String getName()

         {

                   return name;

         }

         public int getAge()

         {

                   return age;

         }

}

public classTreeSetDemo2

{

         public static void treeSet_Advanced()

         {

                   TreeSet treeSet = newTreeSet(new MyComparator());

                   treeSet.add(newFamilyMember("hh", 22));

                   treeSet.add(newFamilyMember("bb", 1));

                   treeSet.add(newFamilyMember("bb", 1));

                   treeSet.add(newFamilyMember("bb", 2));

                   treeSet.add(newFamilyMember("bbmm", 22));

                   treeSet.add(newFamilyMember("bbbb", 23));

                   for(Iterator iter =treeSet.iterator(); iter.hasNext(); )

                   {

                            FamilyMember fm =(FamilyMember)iter.next();

                            System.out.println(fm.getName()+ "--->" + fm.getAge());

                   }

         }

         public static void main(String[] args)

         {

                   treeSet_Advanced();

         }

}       

练习:按照字符串长度排序。

import java.util.*;

class StrComparator implements Comparator

{

         publicint compare(Object o1, Object o2)

         {

                   Strings1 = (String)o1;

                   Strings2 = (String)o2;

                   intresult = (new Integer(s1.length())).compareTo(new Integer(s2.length()));

                   if(0== result)

                            returns1.compareTo(s2);//比较字符串

                   returnresult;

         }

}

public class TreeSetTest

{

         publicstatic void strLenSort()

         {

                   TreeSettreeSet = new TreeSet(new StrComparator());//易错!!不要漏掉!!!

                   treeSet.add("huanhuan");

                   treeSet.add("xiaoleng");

                   treeSet.add("fanfan");

                   treeSet.add("babybeibei");

                   for(Iteratoriter = treeSet.iterator(); iter.hasNext(); )

                   {

                            System.out.println(iter.next());

                   }

         }

         publicstatic void main(String[] args)

         {

                   strLenSort();

         }

}                

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值