隨筆 - 19  文章 - 0  trackbacks - 0
          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          Map集合


          1.Map存儲了一系列鍵值的映射關系
          2.Map集合需要保證鍵的唯一性
          3.可以通過鍵獲取到值,反之則不能
          4.Map集合存儲元素使用put(key,valus)方法.
          5.遍歷Map集合的兩種遍歷方式
          a)通過KeySet方法返回由鍵組成的集合,迭代集合里面的元素拿到所有的鍵再通過get方法根據鍵來獲取值
          b)通過entrySet方法返回鍵所映射的關系組成的集合,迭代該集合就拿到一個鍵值映射的關系,再通過getKey獲取到鍵,再通過getValue()方法獲取到值


          HashMap
          線程不安全,存儲速度快,允許存放null鍵,null值
          通過HashSet保持鍵的唯一性

          Hashtable
          線程安全,存儲速度慢,不允許存放null鍵與null值

          TreeMap
          通過二叉樹的原理保證了鍵的唯一性
          對鍵進行了排序,排序原理與SetMap相同.
          (如果想要使用這個方法,必須要沖構造方法里面重寫Comparator 或者從對象所屬的類繼承Comparator實現這個接口)

          Properties
          Hashtable的子類,所以是線程安全的.
          用于讀寫配置文件,一般配置項等號兩邊都是String,所以集合中的兩個列保存的都是String類型的數據.
          這個集合中只能存String,所以不能使用泛型.


          /*JavaAPI總結:application programming interface應用程序編程接口 sun公司提供給我們用的程序
          一、String、StringBuffer、StringBuilder
          1、String類是字符串常量
          2、String池:String s = "abc" 和String s = new String("abc")的區別
          3、String類的常用方法:charAt、indexOf、toCharArray、substring、split、compareTo、equals
          4、StringBuffer:字符串容器,長度可變,一般用于字符串的增減刪的操作。reverse方法反向
          String s = "abc"; s = s + "xxx";//String長度不可變,因為是常量
          5、StringBuilder線程不安全,StringBuffer線程安全

          二、集合類
          |-Iterable:實現增強for循環
          |--Collection:單列,按照一種或多種規則來存儲一系列元素
          |---List:有序,允許有重復元素
          |----AbstractList:抽象類,實現了iterator方法。
          |-----ArrayList:數組實現,查找塊,增刪慢
          |-----Vector:和ArrayList一樣,只是線程安全
          |-----LinkedList:鏈表實現,查找慢,增刪塊
          |---Set:無序,不允許有重復元素
          |----HashSet:通過哈希算法保證元素不重復,對象要正確重寫equals和hashCode方法
          |----HashTable:同上,但是線程安全
          |----TreeSet:通過樹狀結構保證元素不重復,兩種方式
          1、按照元素的自然順序進行排序,前提是元素具備比較功能,實現了Comparable接口的compareTo方法
          2、在構造TreeSet實例時,傳入一個比較器,實現Comparator接口的compare方法

          |-Map:保存的是鍵值對應關系,其中鍵不允許有重復,可以通過keySet方法拿到一個包含所有鍵的Set
          再調用get(key)方法通過鍵拿到value
          |--HashMap:通過HashSet的原理保證鍵不重復。
          |--TreeMap:通過TreeSet的原理保證鍵不重復
          |--Properties:用于讀取配置文件,不需要聲明泛型,因為鍵和值都只能為String類型。
          list方法將集合中的配置項輸出到一個打印流
          load方法將一個輸入流中的配置項存到集合中
          Jdk1.5新特性泛型,減少集合存元素時錯誤發生的幾率。
          Jdk1.5出現Iterable,為了實現增強for循環 for(元素類型 變量:集合或數組)

          工具類:
          Collections:集合工具類,sort、binarySearch、reverse
          Arrays:數組工具類,sort。。。。


          三、包裝類
          1、Integer x = 0;x = x + 1; 裝箱-拆箱-裝箱(jdk1.5)
          2、Interger.parseInt(String)將字符串轉為int型

          四、System類
          1、System類的常用方法:gc()垃圾回收、exit(0)終止程序、currentTimeMillis()獲得自1970年1月1日零時
          以來的毫秒數、getProperty方法獲得系統屬性。
          2、兩個靜態成員變量:in和out
          in:標準輸入流,InputStreamReader類型
          out:標準打印流,PrintStream類型

          五、Runtime類
          表示運行時,exec方法,在后臺新開啟一個窗口運行命令,是當前窗口的子窗口,繼承所有窗口屬性

          六、日期對象
          1、Date:大部分方法已過時,用new Date()創建日期對象表示當前時間
          2、DateFormat:將日期格式化,抽象類
          DateFormat df = DateFormat.getInstance(); String dateStr = df.format(new Date);
          3、Calendar對象:
          Calendar c = Calendar.getInstance();
          可以將類中定義的常量當做參數傳入get和set方法來獲得和設置時間。
          add方法,增加時間值,具體增加哪一項,就看傳入的常量,調用完此方法,時間對象就被改變了。
          */

          面試題目總結:

          一、請說說ArrayList、Vector和LinkedList的區別
          這三者都是單列集合Collection下List集合的實現類,所以他們的共同點,元素有序,允許重復元素
          不同點:
          ArrayList和Vector底層都是數組實現,這樣的實現注定查找快、增刪慢
          ArrayList和Vector的區別在于線程安全問題,Vector支持線程同步,是線程訪問安全的,而ArrayList線程不安全
          LinkedList底層是鏈表結構,查找元素慢、增刪元素速度快,線程不安全。

          二、請說說HashSet原理,并寫程序證明
          HashSet在存元素時,會調用對象的hashCode方法計算出存儲位置,然后和該位置上所有的元素進行equals比較,
          如果該位置沒有其他元素或者比較的結果都為false就存進去,否則就不存。
          這樣的原理注定了元素是按照哈希值來找存儲位置,所有無序,而且可以保證無重復元素
          我們在往HashSet集合存儲元素時,對象應該正確重寫Object類的hashCode和equals方法
          正因為這樣的原理,HashSet集合是非常高效的。
          比如,要查找集合中是否包含某個對象,首先計算對象的hashCode,折算出位置號,到該位置上去找就可以了,而不用和所有的元素都比較一遍

          三、Collection和Collections的區別
          兩者沒有任何關系
          Collection是單列集合的父接口,JDK1.5中定義了Iterable接口作為Collection父類,為了實現增強for循環
          Collections是工具類,提供了關于集合的常用操作,例如,排序、二分法查找、反轉元素等

           

            1 Collections 的應用:
            2 
            3 1.
            4 package com.javami.kudyMap;
            5 import java.util.ArrayList;
            6 import java.util.Collections;
            7 import java.util.Comparator;
            8 import java.util.List;
            9 public class ColletionsTest {
           10     public static void main(String[]args)
           11     {
           12         /*
           13          * Collections工具類:提供關于集合的常用操作.
           14          */
           15         ArrayList<String> al = new ArrayList<String>();
           16         al.add("ab");
           17         al.add("aadc");
           18         al.add("aaa");
           19         al.add("hgdfakjg");
           20         al.add("xhyns");
           21         al.add("yyiouop");
           22         al.add("qq");
           23         al.add("zdff");
           24         
           25         /*
           26         for(String s : al)
           27             System.out.println(s+" ");
           28         */
           29         
           30         /*Collections.sort(al);  //list是一個接口  父類型的應用可以指向子類型的對象..
           31         for(String s : al)
           32             System.out.println(s+" ");*/
           33         Collections.sort(al, new StringComparator());
           34         /*
           35          * 第一種方法 : 通過比較器來對比排序   可以在構造方法里面.
           36          * 或者在對象里面實現這個比較器.當new 這個實現接口.它會自動調用比較器的方法進行比較
           37         */
           38         System.out.println("通過StringComparator()方法已經排序好-----");
           39         for(String s : al)
           40             System.out.print(s+" ");
           41         /*
           42          * 使用了API里面的方法!
           43         //binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 
           44         int pos = Collections.binarySearch(al,"aaa",new StringComparator());
           45         System.out.println(pos);//因為我們需要通過比較才可以!
           46         */
           47         int pos = MyCollections.binarySearch(al,"dasdas",new StringComparator());
           48         System.out.println(pos);
           49     }
           50     
           51 }
           52 
           53 /*
           54  * 比較器: 先比較  長短,再比較順序
           55  */
           56 class StringComparator implements Comparator<String>
           57 {
           58 
           59     @Override
           60     public int compare(String s1, String s2)
           61     {
           62         //首先比較長度,再按照字典順序
           63         int num = s1.length()- s2.length();
           64         if(num !=0)
           65             return num;
           66         return s1.compareTo(s2);
           67         
           68     }
           69     
           70 }
           71 
           72 //實現一個二分查找
           73 class MyCollections
           74 {
           75     private MyCollections(){}//私有化
           76     public static<T> int binarySearch(List<T> l,T key,Comparator<T> com)
           77     {
           78         int min = 0;
           79         int max = l.size()-1;
           80         int mid = 0;
           81         while(max >=min)
           82         {
           83             mid = (min+max) / 2;
           84             //判斷比較器里面有沒有!
           85             if(com.compare(key,l.get(mid))>0)//找到集合位置的值
           86                 min = mid+1;
           87             else if(com.compare(key, l.get(mid))<0)
           88                 max = mid-1;
           89             else
           90                 return mid;
           91         }
           92         
           93         //判斷mid位置的元素和key的大小
           94         if(com.compare(key, l.get(mid))>0)
           95             return -mid-2;
           96         return -mid-1;
           97             
           98     }
           99 }
          100 
          101 2.必須要通過比較器比較才能實現二分查找:
          102 
          103 package com.javami.kudyAPI;
          104 import java.util.ArrayList;
          105 import java.util.Collections;
          106 import java.util.Comparator;
          107 
          108 public class Test {
          109     public static void main(String[]args)
          110     {
          111         ArrayList<String> al = new ArrayList<String>();
          112         al.add("as");
          113         al.add("scx");
          114         al.add("dsad");
          115         al.add("hellsda");
          116         al.add("dsazxc");
          117         al.add("dascxxc");
          118         //在通過二分查找之前我們要經過排序'
          119         System.out.println("還沒有排序之前");
          120         for(String s : al)
          121             System.out.print(s+" ");
          122         
          123         
          124         //第二部 : 當你調用二分查找之后.會調用比較器進行比較.是經過排序后的才可以進行二分查找
          125         //比較器一定要傳過來
          126         int num = Collections.binarySearch(al, "dsaas",new Comparator<String>(){
          127 
          128             @Override
          129             public int compare(String s1, String s2) {
          130                 int num = s1.length() - s2.length();//比較長度
          131                 if(num != 0)
          132                     return num;
          133                 return s1.compareTo(s2); //按字典順序排
          134             }
          135             
          136         });
          137         System.out.println(num+1);
          138     }
          139 }
          140 
          141 
          142 日期的應用:
          143 
          144 package com.javami.kudyAPI;
          145 import java.util.Calendar;
          146 public class CalendarTest {
          147 
          148     /**
          149      * @param args
          150      */
          151 
          152     public static void main(String[] args)
          153     {
          154         Calendar calendar = Calendar.getInstance();
          155         printCalendar(calendar);
          156         int nums = getDayNum(2012);
          157         System.out.println(nums);
          158         
          159         //----------------
          160         Calendar startDay = Calendar.getInstance();//獲取當前的日歷
          161         Calendar finishDay = getFinishDay(startDay);
          162         int num = finishDay.get(Calendar.DAY_OF_YEAR) - calendar.get(Calendar.DAY_OF_YEAR);
          163         System.out.println(num+"天數");
          164     }
          165     
          166     //計算出某年的2月份有多少天
          167     public static int getDayNum(int year)
          168     {
          169         //1.獲取一個日歷
          170         Calendar calendar = Calendar.getInstance();
          171         
          172         /*
          173          * set(int year, int month, int date) 
          174           設置日歷字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
          175          */
          176         calendar.set(year,2,1); //2月份其實就是中國的三月
          177         //日歷字段  DAY_OF_YEAR獲取到年中的月份  , -1  其實就是2月份
          178         calendar.add(Calendar.DAY_OF_YEAR,-1);
          179         return calendar.get(Calendar.DAY_OF_MONTH); //獲取到二月份的天數
          180     }
          181     
          182     //一個項目做100天,周末休息,五一和十一各休息一天,今天開始做,哪天完工
          183     //一個項目做100天,周末休息,五一和十一各休息一天,今天開始做,哪天完工
          184     public static Calendar getFinishDay(Calendar c) {
          185         for(int i=0; i<100; i++) {
          186             
          187             //如果是星期六或者星期天(get 和 set 的字段數字,指示一個星期中的某天。)
          188             if(c.get(Calendar.DAY_OF_WEEK)==1||c.get(Calendar.DAY_OF_WEEK)==7)
          189                 i--;
          190             //(get 和 set 的字段數字,指示一個月中的某天。)
          191             else if(c.get(c.DAY_OF_MONTH)==1&&(c.get(c.MONTH)==4||c.get(c.MONTH)==9))
          192                 i--;
          193             c.add(Calendar.DAY_OF_YEAR, 1);
          194         }
          195         return c;
          196     }
          197     //代表是一個時間
          198     public static void printCalendar(Calendar calendar)
          199     {
          200         int year = calendar.get(calendar.YEAR); //
          201         int month = calendar.get(calendar.MONTH); //
          202         int day = calendar.get(calendar.WEEK_OF_MONTH);//
          203         int week = calendar.get(calendar.DAY_OF_WEEK);//星期
          204         int hour = calendar.get(calendar.HOUR_OF_DAY); //時間
          205         int minute = calendar.get(calendar.MINUTE);//
          206             
          207         String StringWeek = null;
          208         switch(week)
          209         {
          210         
          211             case 1:
          212                     StringWeek = "星期天";
          213                     break;
          214             case 2:
          215                     StringWeek = "星期一";
          216                     break;
          217             case 3:
          218                     StringWeek = "星期二";
          219                     break;
          220             case 4:
          221                     StringWeek = "星期三";
          222                     break;
          223             case 5:
          224                     StringWeek = "星期四";
          225                     break;
          226             case 6:
          227                     StringWeek = "星期五";
          228                     break;
          229             case 7:
          230                     StringWeek = "星期六";
          231                     break;
          232         }
          233         //并接成字符串
          234         String str = ""+year+"-"+(month+1)+"-"+day+"-"+week+"-"+hour+"-"+minute;
          235         System.out.println(str);
          236     }
          237 
          238 
          239 }
          posted on 2012-08-07 01:10 、小細 閱讀(324) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 九龙坡区| 榆社县| 达州市| 左权县| 南安市| 梧州市| 射阳县| 河源市| 余姚市| 肥城市| 水城县| 轮台县| 桦南县| 龙口市| 渭南市| 江孜县| 墨竹工卡县| 五常市| 新沂市| 卓资县| SHOW| 中超| 华坪县| 许昌市| 杭州市| 定襄县| 安西县| 靖西县| 泽州县| 长寿区| 彩票| 蒙阴县| 资中县| 托克托县| 蒙山县| 犍为县| 斗六市| 建阳市| 莱西市| 泸溪县| 天全县|