和風細雨

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

          鏈表講解

          集合框架的繼承體系

          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

          主站蜘蛛池模板: 临高县| 紫云| 高尔夫| 电白县| 塔河县| 五原县| 清徐县| 迭部县| 马鞍山市| 浪卡子县| 全南县| 武功县| 山东| 临城县| 江西省| 濮阳市| 蒙自县| 锦屏县| 中江县| 保康县| 安乡县| 安陆市| 余姚市| 湘西| 林周县| 荔波县| 荣成市| 都昌县| 离岛区| 陆川县| 新绛县| 罗定市| 乐亭县| 汉寿县| 扶风县| 新巴尔虎右旗| 丰宁| 阿鲁科尔沁旗| 正安县| 富源县| 彭阳县|