和風細雨

          世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術自出。

          鏈表講解

          集合框架的繼承體系

          Java2中包含了6個集合接口,這些接口的通用目的實現類,以及一個集合實用類Collections,共同組成了集合框架的核心.
          6個集合接口如下:
          Collection及其以下的List,Set,以及Set下的SortedSet
          Map及其以下的SortedMap

          鏈表的通用實現

          ArrayList:線程不安全的動態數組類,批量查詢速度快,單個查找速度慢.
          Vector:線程安全的動態數組類,效率比ArrayList低下.
          LinkedList:動態鏈表類,適于在隊列首尾頻繁增刪成員的場合.

          鏈表的創建

          List<Member> ls=new ArrayList<Member>();// 1.5版本及以上

          List ls=new ArrayList();// 1.5版本以下

          之所以將ls類型指定為List<Member>而不是ArrayList<Member>是因為 如果情況變化, ArrayList需要修改成Vector或LinkedList時無須修改其它代碼,僅修改實例類型即可.

          向List中添加元素

          添加單個元素
          ls.add(new Member("Andy",21));

          從別的鏈表中添加多個元素
          List<Member> ls2=new ArrayList<Member>();
          ls2.add(new Member("Felex",21));
          ls2.add(new Member("Gates",23));
          ls.addAll(ls2);

          注意:
          1.5及其以上版本中,添加的元素必須和定義時一致,如ls的類型是List<Member>,那么向其中添加的元素必須是Member或其子類.
          1.5以下版本中,對添加的元素不作檢查,只要是Object即可,如果是基本類型則需裝箱成類類型.如ls.add(new Integer(8));

          刪除鏈表中元素

          ls.remove(member); // 直接刪除對象,member=new Member("Edin",28)
          ls.remove(2);           // 刪除第三個元素
          ls.clear();                // 將已有數據全部清除

          對鏈表進行遍歷

          1) 1.5中獨有的遍歷方法,代碼最短,使用最方便
          for(Member member:ls){
               // member就是依次取出的每個元素
          }

          2) 常規方法,多用于需要取得下標的場合,各版本均適用
          for(int i=0;i<ls.size();i++){
              Member member=ls.get(i);// member就是依次取出的每個元素, 1.5及其以上版本適用, ls.size()為鏈表長度
              Member member=(Member)ls.get(i);// 1.5以下版本適用
          }

          3) 使用Iterator對鏈表進行遍歷的方法,各版本均適用
          for(Iterator it=ls.iterator();it.hasNext();){
              Member member=(Member)it.next();
          }

          鏈表的其它常用的方法

          ls.contains(Object o);// 返回鏈表中是否包含某元素
          ls.indexOf(Object o);// 返回對象o是鏈表中的第幾號元素
          isEmpty();// 返回鏈表中是否有元素

          對鏈表進行排序
          1)讓List中元素必須已經實現Comparable接口:
          public class Member implements Comparable {
            private String name;

            private int age;

            public Member(String name, int age) {
              this.name = name;
              this.age = age;
            }

            public int compareTo(Object obj) {
              Member another = (Member) obj;
              return this.name.compareTo(another.name);// 按名稱排序,如果是this.age-another.age則按年齡排序
            }
           
            public String toString(){
              return "Member name="+name+" age="+age;
            }
          }

          2)排序過程
          List<Member> ls=new ArrayList<Member>();

          ls.add(new Member("Felex",21));
          ls.add(new Member("Gates",23));
          ls.add(new Member("Andy",21));
          ls.add(new Member("Bill",23));
          ls.add(new Member("Cindy",24));
          ls.add(new Member("Dell",27));

          Collections.sort(ls);

          for(Member member:ls){
                System.out.println(member);
          }

          輸出:
          Member name=Andy age=21
          Member name=Bill age=23
          Member name=Cindy age=24
          Member name=Dell age=27
          Member name=Felex age=21
          Member name=Gates age=23

          // 如果需要逆序可以使用Collections.reverse(ls);

          鏈表與數組之間的轉換

          1) List轉換成數組
          List<String> ls=new ArrayList<String>();

          ls.add("Felex");
          ls.add("Gates");
          ls.add("Andy");
          ls.add("Bill");
          ls.add("Cindy");
          ls.add("Dell");

          Object[] arr=ls.toArray();
          for(Object obj:arr){
                System.out.println((Object)obj);
          }

          輸出為:
          Felex
          Gates
          Andy
          Bill
          Cindy
          Dell

          2) 數組轉換成List
          String[] arr={"Andy","Bill","Cindy","Dell"};
          List<String> ls=Arrays.asList(arr);
          for(String str:ls){
               System.out.println(str);
          }

          輸出:
          Andy
          Bill
          Cindy
          Dell

          posted on 2008-02-21 19:26 和風細雨 閱讀(485) 評論(0)  編輯  收藏 所屬分類: J2SE

          主站蜘蛛池模板: 万盛区| 中牟县| 林州市| 娱乐| 张家川| 渭源县| 定安县| 建始县| 大悟县| 裕民县| 德化县| 吴旗县| 永仁县| 大港区| 团风县| 德阳市| 六枝特区| 维西| 茌平县| 乐业县| 宜昌市| 靖边县| 海南省| 靖西县| 商河县| 锡林浩特市| 九江市| 台北市| 新龙县| 罗田县| 阿荣旗| 罗江县| 松原市| 万州区| 乌拉特前旗| 全南县| 汕尾市| 集安市| 阜阳市| 长宁县| 凤庆县|