posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          package com.semovy.test;

          import java.util.ArrayList;
          import java.util.Arrays;
          import java.util.Collection;
          import java.util.Comparator;
          import java.util.HashSet;
          import java.util.LinkedHashSet;
          import java.util.LinkedList;
          import java.util.List;
          import java.util.ListIterator;
          import java.util.SortedSet;
          import java.util.TreeSet;

          /**
           *
           * @author semovy@gmail.com
           *  Collection
           *  |        |
           *  List    Set______________________________________________
           *  |__________                      |       |               |
           *  |          |                     |       |               |
           *  ArrayList  LinkedList        HashSet   LinkedHashSet     SortedSet
           *                                                           |
           *                                                           TreeSet
           */
          public class CollectionTest {
          /* Set容器中的對(duì)象是唯一的,所以加入Set容器的對(duì)象,必須重新equals()方法.作為唯一性的標(biāo)識(shí)
           * HashSet的排序規(guī)則是利用HashTable,所以HashSet容器的對(duì)象必須重新定義hashCode()方法
           * 利用hashCode()方法,可以讓快速找到容器中的對(duì)象,在比較兩加入到容器中的對(duì)象是否相同時(shí),會(huì)比較
           * hashCode()方法返回是否相同,如果相同,則再利用equals()方法比較,如果兩者都相同,則被看作相同的對(duì)象
           * String 對(duì)象的hashCode(),equals已經(jīng)被重新定義
           */
           public static void main(String[] args)
           {
            //String 對(duì)象的hashCode(),equals已經(jīng)被重新定義
            //結(jié)果重復(fù)的內(nèi)容對(duì)象被除去,并按按照hashCode()升序排序
            Collection<String> colStr = new HashSet<String>();
            colStr.add("ArrayList");
            colStr.add("LinkedList");
            colStr.add("HashSet");
            colStr.add("LinkedHashSet");
            colStr.add("LinkedSortedSet");
            colStr.add("ArrayList");
            CollectionTest ct = new CollectionTest();
            ct.display(colStr);
            //自定義類Employee.如果沒(méi)有重新定義hashCode(),equals()方法,則不會(huì)除去重復(fù)內(nèi)容的對(duì)象,不會(huì)自動(dòng)按hashCode()排序
            Collection<Employee> colEmp = new HashSet<Employee>();
            colEmp.add(new Employee(1,"no.1","semovy","he is a hero."));
            colEmp.add(new Employee(2,"no.2","superman_wshm","from Shenzhen China"));
            colEmp.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            colEmp.add(new Employee(4,"no.4","joke","note1"));
            colEmp.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            ct.display(colEmp);
            //LinkedHashSet,既去除了內(nèi)容重復(fù)的對(duì)象,又按時(shí)插入容器時(shí)的順序,被迭代.
            Collection<Employee> linkedEmp = new LinkedHashSet<Employee>();
            linkedEmp.add(new Employee(1,"no.1","semovy","he is a hero."));
            linkedEmp.add(new Employee(2,"no.2","superman_wshm","from Shenzhen China"));
            linkedEmp.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            linkedEmp.add(new Employee(4,"no.4","joke","note1"));
            linkedEmp.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            ct.display(linkedEmp);
            //SortedSet接口,可以去除重復(fù),并有比較器.
            SortedSet<String> ss = new TreeSet<String>();
            ss.add("1");
            ss.add("2");
            ss.add("3");
            ss.add("4");
            ss.add("4");
            ct.display(ss);
            
            //  SortedSet接口,可以去除重復(fù),并有比較器.
            SortedSet<Employee> treeEmp = new TreeSet<Employee>(
              new Comparator<Employee>()//使用Employee泛型,匿名內(nèi)部類比較器
              {
               
               public int compare(Employee arg0, Employee arg1) {
                
                return arg1.getName().compareTo(arg0.getName());//按照名稱比較降序排序
               }
               
              }
              );
            treeEmp.add(new Employee(1,"no.1","semovy","he is a hero."));
            treeEmp.add(new Employee(2,"no.2","superman_wshm","from Shenzhen China"));
            treeEmp.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            treeEmp.add(new Employee(4,"no.4","joke","note1"));
            treeEmp.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            ct.display(treeEmp);
            
            //SortedSet接口,可以去除重復(fù),并有比較器.比較器名為comparatorById
            ComparatorById comparatorById = new ComparatorById();
            SortedSet<Employee> treeEmp1 = new TreeSet<Employee>(comparatorById);
            treeEmp1.add(new Employee(1,"no.1","semovy","he is a hero."));
            treeEmp1.add(new Employee(2,"no.2","superman_wshm","from Shenzhen China"));
            treeEmp1.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            treeEmp1.add(new Employee(4,"no.4","joke","note1"));
            treeEmp1.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            ct.display(treeEmp1);
            
            System.out.println();
            System.out.println(treeEmp1.last().toString());
            System.out.println(treeEmp1.first().toString());
            
            //用List接口的實(shí)現(xiàn)
            //ArrayList.基于數(shù)組的實(shí)現(xiàn),添加與刪除的效率慢于LinkedList,
            //LinkedList基于雙向鏈表的實(shí)現(xiàn) ,添加與刪除的效率快于ArrayList,但迭代遍歷的效率不如ArrayList
            List<Employee> empList = new ArrayList<Employee>();
            empList.add(new Employee(1,"no.1","semovy","he is a hero."));
            empList.add(new Employee(2,"no.2","superman_wshm","from Shenzhen China"));
            empList.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            empList.add(new Employee(4,"no.4","joke","note1"));
            empList.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            ct.display(empList);
            
            Employee[] arrEmp = empList.toArray(new Employee[0]);
            Arrays.sort(arrEmp, comparatorById);//用Arrays.sort靜態(tài)方法排序,比較器是comparatorById
            
            ct.display(arrEmp);
            
            LinkedList<Employee> linkedListEmp = new LinkedList<Employee>();
            linkedListEmp.add(new Employee(1,"no.1","semovy","he is a hero."));
            linkedListEmp.add(new Employee(2,"no.2","superman_wshm","from Shenzhen China"));
            linkedListEmp.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            linkedListEmp.add(new Employee(4,"no.4","joke","note1"));
            linkedListEmp.add(new Employee(3,"no.3","韋善茂","來(lái)自中國(guó)"));
            ct.display(linkedListEmp);
            
            ListIterator<Employee> ll =  linkedListEmp.listIterator();
            while(ll.hasNext())
            {
             Employee em = ll.next();
             System.out.println("index:" + ll.nextIndex());
             if(em.getId() == 3)
              ll.remove();//刪除剛跨過(guò)的元素
            }
            ct.display(linkedListEmp);
           }

           /**
            * display all the objects in Collection
            * @prama Conllection
            */
           public void display(Collection c)//用for循環(huán)集合
           {
            System.out.println();
            for(Object obj : c)
             System.out.println(obj.toString() + " ");
           }
           public void display(Object[] arr)//用for循環(huán)數(shù)組
           {
            System.out.println();
            for(Object obj : arr)
             System.out.println(obj.toString() + " ");
           }
          }
          /**
           * 比較器接口Comparator 按id.升序
           */
           class ComparatorById implements Comparator<Employee>
          {
           public int compare(Employee e1 ,Employee e2)
           {
            return e1.getId() - e2.getId();//按照id比較升序排序
           }
          }







          //==============================================================================
          結(jié)果:


          ArrayList
          HashSet
          LinkedSortedSet
          LinkedHashSet
          LinkedList

          [ ID: 3 , No.: no.3 , Name: 韋善茂 , Note: 來(lái)自中國(guó) ]
          [ ID: 2 , No.: no.2 , Name: superman_wshm , Note: from Shenzhen China ]
          [ ID: 1 , No.: no.1 , Name: semovy , Note: he is a hero. ]
          [ ID: 4 , No.: no.4 , Name: joke , Note: note1 ]

          [ ID: 1 , No.: no.1 , Name: semovy , Note: he is a hero. ]
          [ ID: 2 , No.: no.2 , Name: superman_wshm , Note: from Shenzhen China ]
          [ ID: 3 , No.: no.3 , Name: 韋善茂 , Note: 來(lái)自中國(guó) ]
          [ ID: 4 , No.: no.4 , Name: joke , Note: note1 ]

          1
          2
          3
          4

          [ ID: 3 , No.: no.3 , Name: 韋善茂 , Note: 來(lái)自中國(guó) ]
          [ ID: 2 , No.: no.2 , Name: superman_wshm , Note: from Shenzhen China ]
          [ ID: 1 , No.: no.1 , Name: semovy , Note: he is a hero. ]
          [ ID: 4 , No.: no.4 , Name: joke , Note: note1 ]

          [ ID: 1 , No.: no.1 , Name: semovy , Note: he is a hero. ]
          [ ID: 2 , No.: no.2 , Name: superman_wshm , Note: from Shenzhen China ]
          [ ID: 3 , No.: no.3 , Name: 韋善茂 , Note: 來(lái)自中國(guó) ]
          [ ID: 4 , No.: no.4 , Name: joke , Note: note1 ]

          [ ID: 4 , No.: no.4 , Name: joke , Note: note1 ]
          [ ID: 1 , No.: no.1 , Name: semovy , Note: he is a hero. ]

          [ ID: 1 , No.: no.1 , Name: semovy , Note: he is a hero. ]
          [ ID: 2 , No.: no.2 , Name: superman_wshm , Note: from Shenzhen China ]
          [ ID: 3 , No.: no.3 , Name: 韋善茂 , Note: 來(lái)自中國(guó) ]
          [ ID: 4 , No.: no.4 , Name: joke , Note: note1 ]
          [ ID: 3 , No.: no.3 , Name: 韋善茂 , Note: 來(lái)自中國(guó) ]

          [ ID: 1 , No.: no.1 , Name: semovy , Note: he is a hero. ]
          [ ID: 2 , No.: no.2 , Name: superman_wshm , Note: from Shenzhen China ]
          [ ID: 3 , No.: no.3 , Name: 韋善茂 , Note: 來(lái)自中國(guó) ]
          [ ID: 3 , No.: no.3 , Name: 韋善茂 , Note: 來(lái)自中國(guó) ]
          [ ID: 4 , No.: no.4 , Name: joke , Note: note1 ]

          [ ID: 1 , No.: no.1 , Name: semovy , Note: he is a hero. ]
          [ ID: 2 , No.: no.2 , Name: superman_wshm , Note: from Shenzhen China ]
          [ ID: 3 , No.: no.3 , Name: 韋善茂 , Note: 來(lái)自中國(guó) ]
          [ ID: 4 , No.: no.4 , Name: joke , Note: note1 ]
          [ ID: 3 , No.: no.3 , Name: 韋善茂 , Note: 來(lái)自中國(guó) ]
          index:1
          index:2
          index:3
          index:3
          index:4

          [ ID: 1 , No.: no.1 , Name: semovy , Note: he is a hero. ]
          [ ID: 2 , No.: no.2 , Name: superman_wshm , Note: from Shenzhen China ]
          [ ID: 4 , No.: no.4 , Name: joke , Note: note1 ]



          主站蜘蛛池模板: 防城港市| 苍溪县| 平和县| 邵阳县| 永吉县| 姚安县| 手机| 镇原县| 长海县| 和顺县| 阿合奇县| 疏勒县| 慈利县| 凤阳县| 高陵县| 化州市| 甘孜| 巴东县| 尼勒克县| 新化县| 乌鲁木齐县| 襄汾县| 泸州市| 吉木乃县| 丽水市| 湖南省| 泌阳县| 叙永县| 酒泉市| 彰武县| 东乡县| 惠来县| 石泉县| 乌苏市| 维西| 瑞丽市| 慈利县| 台前县| 绥中县| 黄大仙区| 凤凰县|