Java中的集合

来源:互联网 发布:粒子群算法工具箱下载 编辑:程序博客网 时间:2021/01/22 00:42

   一、用得最多的主要有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();
      while(it.hasNext())
      {
           System.out.println(it.next());
      }

原创粉丝点击