工作小驛

          Ninja!

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            103 Posts :: 0 Stories :: 36 Comments :: 0 Trackbacks
          上次課我們學(xué)過了數(shù)組,知道它只是一組數(shù)(或是對(duì)象),但是有些自己的特性。在java里還有一類東西與數(shù)組類似,也是有著特性的一組數(shù)(或是對(duì)象),叫做集合類。我們上節(jié)課講到了,數(shù)組的長(zhǎng)度在創(chuàng)建時(shí)已經(jīng)確定了,但是有時(shí)候我們事先根本不知道長(zhǎng)度是多少啊,比如我們做電子商務(wù)網(wǎng)站時(shí),有個(gè)購(gòu)物車程序。你總不能用數(shù)組規(guī)定,人家只能買5樣?xùn)|西吧。你就是把長(zhǎng)度定為10000也不行,萬(wàn)一遇上個(gè)特別有錢的呢!呵呵,這只是開玩笑的。我們會(huì)使用集合類解決這個(gè)問題。

               集合類是放在java.util.*;這個(gè)包里。集合類存放的都是對(duì)象的引用,而非對(duì)象本身,為了說起來方便些,我們稱集合中的對(duì)象就是指集合中對(duì)象的引用(reference)。引用的概念大家不會(huì)忘了吧,在前邊我們講數(shù)據(jù)類型時(shí)講的。

               集合類型主要有3種:set(集)、list(列表)、map(映射)和Queue(隊(duì)列)。//隊(duì)列為jdk5中的加上的  

          (1)    Set

          集(set)是最簡(jiǎn)單的一種集合,它的對(duì)象不按特定方式排序,只是簡(jiǎn)單的把對(duì)象加入集合中,就像往口袋里放東西。對(duì)集中成員的訪問和操作是通過集中對(duì)象的引用進(jìn)行的,所以集中不能有重復(fù)對(duì)象。我們知道數(shù)學(xué)上的集合也是Set這個(gè),集合里面一定是沒有重復(fù)的元素的。
          (2)List

          列表(List)的主要特征是其對(duì)象以線性方式存儲(chǔ),沒有特定順序,只有一個(gè)開頭和一個(gè)結(jié)尾,當(dāng)然,它與根本沒有順序的Set是不同的。它是鏈表嘛,一條鏈肯定有順序這個(gè)順序就不一定了。

               (3)Map

                   映射(Map),這個(gè)在java里不是地圖的意思,其實(shí)地圖也是映射哈。它里面的東西是鍵-值對(duì)(key-value)出現(xiàn)的,鍵值對(duì)是什么呢?舉個(gè)例子,比如我們查字典,用部首查字法。目錄那個(gè)字就是鍵,這個(gè)字的解釋就是值。鍵和值成對(duì)出現(xiàn)。這樣說可以理解吧。這也是很常用的數(shù)據(jù)結(jié)構(gòu)哦。

                (4)Queue

                    在jdk5.0以前,通常的實(shí)現(xiàn)方式是使用java.util.List集合來模仿Queue。Queue的概念通過把對(duì)象添加(稱為enqueuing的操作)到List的尾部(即Queue的后部)并通過從List的頭部(即Queue的前部)提取對(duì)象而從 List中移除(稱為dequeuing的操作)來模擬。你需要執(zhí)行先進(jìn)先出的動(dòng)作時(shí)可以直接使用Queue接口就可以了。

                    這4個(gè)東西,有時(shí)候功能還不太完善,需要有些子類繼承它的特性。Set的子接口有TreeSet,SortedSet,List的有ArrayList等,Map里有HashMap,HashTable等,Queue里面有BlockingQueue等。我們來看看例子吧:

          實(shí)踐: Set舉例

                 import java.util.*;

          public class SetExample {

                                     public static void main(String[] args) {

                                   Set set = new HashSet();  //HashSet是Set的子接口

                                   set.add("one");

                                   set.add("second");

                                   set.add("3rd");

                                   set.add(new Integer(4));

                                   set.add(new Float(5.0F));

                                   set.add("second");

                                   set.add(new Integer(4));

                                   System.out.println(set);

                                     }} List舉例:

                     import java.util.*;

          public class ListExample {

                                            public static void main(String[] args) {

                                          List list = new ArrayList();

                                          list.add("one");

                                          list.add("second");

                                          list.add("3rd");

                                          list.add(new Integer(4));

                                          list.add(new Float(5.0F));

                                          list.add("second");

                                          list.add(new Integer(4));

                                          System.out.println(list);

                                     }}

          Map舉例

          import java.util.Map;

          import java.util.HashMap;

          import java.util.Iterator;

          import java.io.FileReader;



          public class MapExample {

                              public static void main(String[] args)  throws java.io.FileNotFoundException {

                                          Map word_count_map = new HashMap();

                                          FileReader reader = new FileReader(args[0]);

                                          Iterator  words = new WordStreamIterator(reader);



                                          while ( words.hasNext() ) {

                                                String word = (String) words.next();

                                                String word_lowercase = word.toLowerCase();

                                         Integer frequency = (Integer)word_count_map.get(word_lowercase);

          if ( frequency == null ) {

                                             frequency = new Integer(1);

                                         } else {

                                             int value = frequency.intValue();

                                                    frequency = new Integer(value + 1);}

                                                word_count_map.put(word_lowercase, frequency);

                                          }

                                          System.out.println(word_count_map);

                                            }}

          Queue舉例:

          import java.io.IOException;

          import java.io.PrintStream;

          import java.util.LinkedList;

          import java.util.Queue;



          public class QueueTester {

            public Queue<String> q; //發(fā)現(xiàn)了一個(gè)奇怪的語(yǔ)法,這個(gè)尖括號(hào)是泛型聲明

                                public QueueTester() {q = new LinkedList<String>();}

          public void testFIFO(PrintStream out) throws IOException {

                                          q.add("First");

                                          q.add("Second");

                                           q.add("Third");

                                          Object o;

                                   while ((o = q.poll()) != null) {

                                         out.println(o);}}

                       public static void main(String[] args) {

                            QueueTester tester = new QueueTester();

                     try {  tester.testFIFO(System.out);

                                   } catch (IOException e) {

                                         e.printStackTrace(); } }}

          上述例子和一些相關(guān)例子(共6個(gè)例子)打包下載
          http://www.100jq.com/upload/2007_07/07070811002751.rar

          總結(jié):

          剛才我們看了上述例子了,對(duì)集合類有了一個(gè)初步的認(rèn)識(shí),它們跟數(shù)組的區(qū)別不只是長(zhǎng)度問題,在集合類里面放進(jìn)去的類型可以是任意的。不像數(shù)組,數(shù)組里面的類型是一樣的。這樣的話,對(duì)于集合類來說即使好事,也是壞事。因?yàn)槟悴豢紤]類型可以隨意的放,但是你放進(jìn)去什么就不知道了不容易找。

          還有啊,什么叫泛型聲明???我們下次課就告訴你。這可是jdk5的酷炫之處哦。
          posted on 2007-07-09 08:05 王君 閱讀(530) 評(píng)論(1)  編輯  收藏 所屬分類: J2SE

          Feedback

          # re: 全新java初學(xué)者實(shí)踐教程10(java SE5.0版)----jdk5的集合類 2007-07-10 11:54 Persuse3
          這是百家拳軟件項(xiàng)目研究室,的原創(chuàng)教程,看全部教程請(qǐng)?jiān)L問 http://www.100jq.com/list.aspx?cid=11
            回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 依兰县| 开江县| 濮阳市| 久治县| 汾阳市| 吉首市| 松原市| 弥勒县| 利津县| 嫩江县| 土默特右旗| 呼伦贝尔市| 汝城县| 延吉市| 咸丰县| 衡阳市| 进贤县| 顺昌县| 礼泉县| 阿克苏市| 吐鲁番市| 丘北县| 阳朔县| 沛县| 舟曲县| 双流县| 连云港市| 湾仔区| 益阳市| 天峨县| 原平市| 凌云县| 巍山| 随州市| 阜康市| 湘阴县| 宾川县| 克拉玛依市| 响水县| 吉水县| 驻马店市|