黑马入学测试—基础—集合

 

上图是集合框架中常用的类和接口: 

       一、用得最多的主要有Set,List,Map,Iterator这几个接口, Set和List接口都是Collection接口的子接口,有很多相同的地方,我们只要撑握了Collection接口的方法及Set和List的用法也就差不多了. 

      Set和List 的区别:1、Set集合是无顺序的,不能放重复的数据 

                                  2、List集合是有序的,可以存放重复的数据

Set的实现类常用的主要有两个:HashSet、TreeSet 

      我们可以把一类对象添加到集合中,并且按对象的某一个属性进行排序(客户化排序和自然排序) 

      1、对TreeSet集进行客户化排序要求写一个类实现Comparator接口,并且重写其中的Compare方法 例: 

      客户化排序容易扩展,如果要按其它的属性排序,只需要重新写一个类实现Comparator接口就可以了, 

      不需要修改原来的代码。 

      class Users 

      { 

           private String name; 

           private int id; 

           public Users(String name,int id) 

           { 

                this.name=name; 

                this.id=id; 

           } 

           public void setName(String name) 

           { 

                 this.name=name; 

           } 

           public String getName() 

           { 

                   return name; 

           } 

           public void setId(int id) 

           { 

                  this.id=id; 

           } 

           public int getId() 

           { 

                 return id; 

           } 

           //这里重写了父类的toString方法 

           public String toString() 

           { 

                  return this.name + "\t" + this.id + "\t"; 

            } 

      } 

      //这个类实现Comparator接口,并且重写了其中的compare方法 

      public class MyComparator implements Comparator 

     { 

           public int  compare(Object o1,Object o2) 

           { 

                Users user1=(Users)o1; 

                Users user2=(Users)o2; 

                if(user1.getId>user2.getId) return 1; 

                else if(user1.getId==user2.getId) return 0; 

                return -1; 

           } 

     } 

     class  TestComparator 

     { 

          public static void main(String args[]) 

          { 

               TestComparator.test(); 

          } 

          public static void test() 

          { 

                  Set   set=new TreeSet(new MyComparator()); 

                  Users user1=new  Users("张三",17); 

                  Users user2=new  Users("李四",13); 

                  Users user3=new  Users("王五",19); 

                  Users user5=new Users("王五",19); 

                  set.add(user1); 

                  set.add(user2); 

                  set.add(user3); 

                  set.add(user5); 

                   

                  for(Object obj :set) 

                  { 

                        System.out.println(obj); 

                  } 

          } 

     } 

     2、自然排序,将需要排序的那个类实现Comparable接口并且重写其中的compareTo方法 

          例如下:      class Users  implements Comparable 

      { 

           private String name; 

           private int id; 

           public Users(String name,int id) 

           { 

                this.name=name; 

                this.id=id; 

           } 

           public void setName(String name) 

           { 

                 this.name=name; 

           } 

           public String getName() 

           { 

                   return name; 

           } 

           public void setId(int id) 

           { 

                  this.id=id; 

           } 

           public int getId() 

           { 

                 return id; 

           } 

           //这里重写了父类的toString方法 

           public String toString() 

           { 

                  return this.name + "\t" + this.id + "\t"; 

            } 

            //重写compareTo方法 

             public int compareTo(Object o) 

             { 

   

                     UserBean user = (UserBean) o; 

                     if (this.id > user.id) return 1; 

                     else if (this.id == user.id) return 0; 

                      return -1; 

             } 

      } 

      3.如果是HashSet自然排序,则要求排序的类重写hashCode方法和equals方法 

      二、对List和Set集进行遍历: 

       对List集合进行遍历有如下几种方法: 

       1、通过下标遍历,2使用迭代器进行遍历,3、增强循环进行遍历 

       List list=new ArrayList(); 

       list.add("aa"); 

       list.add("bb"); 

       list.add("cc"); 

       for(int i=0;i<list.size();i++) 

      { 

          System.out.println(list.get(i)); 

      } 

       

     Iterator it=list.iterator(); 

     while(it.hasNext()) 

    { 

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

    } 

     

    for(Object obj :list) 

    { 

          System.out.println(obj); 

    } 

    三、Vector和ArrayList的区别: 

    1、Vector 和ArrayList都实现了List接口,Vector是线程安全的,可以多个线程同时访问,但性能比较差 

    2、ArrayList线程不安全,不支持多个线程同时访问,但性能比较好,访问的速度快 

     

    四、Map集是以键值对的形式存放的,键不可以重复,值可以重复,如果键重复,会将原来的值覆盖, 

     Map集的实现类主要有三个:HashMap,TreeMap,HashTable 

    HashMap与HashTable 的区别: 1、HashTable是线程安全的,支持同步。2、HashMap线程不安全,不支持 

    同步,但性能比HashTable好 

    Map集的遍历: 

      1、 

      Map map=new HashMap() 

      map.put("1","张飞"); 

      map.put("2","关羽"); 

      map.put("3","刘备"); 

      //得到键的集合 

      Set set=map.keySet(); 

      for(Object obj :set) 

      { 

          System.out.println(map.get(obj)); 

      } 

      2、 

      //得到健值对的集合 

      Set s=map.entrySet(); 

       for(Object obj :set)      { 

          System.out.println(obj); 

      } 

   五、对List集进行客户化排序,可以通过Collections类的sort方法,要求传一个List集和一个Comparator对象 例: 

      List list=new ArrayList() 

      Users user1=new  Users("张三",17);      Users user2=new  Users("李四",13); 

      Users user3=new  Users("王五",19); 

      Users user5=new Users("王五",19); 

      list.add(user1); 

      list.add(user2); 

      list.add(user3); 

      list.add(user5); 

      Collections.sort(list,new Mycomparator()); 

      Iterator it=list.iterator(); 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值