Java-Collections總結(java中Collections)

      網友投稿 1182 2022-05-30

      比較器

      package aaa;

      import java.util.Comparator;

      public class ComparatorByLength implements Comparator {

      public int compare(String o1, String o2) {

      String s1 = (String) o1;

      String s2 = (String) o2;

      int temp = s1.length() - s2.length();

      return temp == 0 ? s1.compareTo(s2) : temp;

      }

      }

      package aaa;

      import java.util.ArrayList;

      import java.util.Collections;

      import java.util.Comparator;

      import java.util.List;

      import java.util.TreeSet;

      public class ListDemo {

      public static void main(String[] args) {

      // TODO Auto-generated method stub

      demo_1();

      demo_2();

      demo_3();

      Demo4();

      }

      public static void Demo4() {

      List list = new ArrayList();

      list.add("abcde");

      list.add("cba");

      list.add("zhangsan");

      list.add("zhaoliu");

      list.add("xiaoqiang");

      System.out.println(list);

      Collections.replaceAll(list, "cba", "NBA");// 原理set(indexOf("cba"),"nba");

      System.out.println(list);

      Collections.shuffle(list);//使用指定的隨機源對指定列表進行置換。

      System.out.println(list);

      Collections.fill(list, "cc");//將list中的所有元素替換沖cc,此方法用做集合的初始化

      System.out.println(list);

      }

      public static void demo_3() {

      // 通過比較器實現倒序排列

      TreeSet ts = new TreeSet(new Comparator() {

      @Override

      public int compare(String o1, String o2) {

      int temp = o2.compareTo(o1);

      return temp;

      }

      });

      ts.add("abc");

      ts.add("hahaha");

      ts.add("zzz");

      ts.add("aa");

      ts.add("cba");

      System.out.println(ts);

      // 利用工具類中的方法實現翻轉排序,排序規則按照比較器。

      TreeSet ts1 = new TreeSet(

      Collections.reverseOrder(new ComparatorByLength()));

      ts1.add("abc");

      ts1.add("hahaha");

      ts1.add("zzz");

      ts1.add("aa");

      ts1.add("cba");

      System.out.println(ts1);

      }

      /**

      * 集合工具類排序

      */

      public static void demo_1() {

      List list = new ArrayList();

      list.add("abcde");

      list.add("cba");

      list.add("aa");

      list.add("zzz");

      list.add("cba");

      list.add("nbaa");

      System.out.println(list);

      Collections.sort(list);

      mySort(list);// Collections.sort(list)實現原理

      System.out.println(list);

      Collections.sort(list, new ComparatorByLength());

      mySort(list, new ComparatorByLength());

      System.out.println(list);

      }

      public static void mySort(List list, Comparator comp) {

      for (int i = 0; i < list.size() - 1; i++) {

      for (int j = i + 1; j < list.size(); j++) {

      if (comp.compare(list.get(i), list.get(j)) > 0) {

      Collections.swap(list, i, j);

      }

      }

      }

      }

      /**

      * @param list

      *??????????? Collections.sort(list)實現的原理, T extends Comparable

      *??????????? T>的意思是,所有實現Comparable的接口的類型或者父類實現Comparable接口的類型

      */

      public static > void mySort(List list) {

      for (int i = 0; i < list.size() - 1; i++) {

      for (int j = i + 1; j < list.size(); j++) {

      if (list.get(i).compareTo(list.get(j)) > 0) {

      Collections.swap(list, i, j);// 交換位置

      }

      }

      }

      }

      public static void demo_2() {

      List list = new ArrayList();

      list.add("abcde");

      list.add("cba");

      list.add("aa");

      list.add("zzz");

      list.add("cba");

      list.add("nbaa");

      System.out.println(list);

      Collections.sort(list);

      int index = Collections.binarySearch(list, "cba");

      System.out.println("index=" + index);

      String max = Collections.max(list, new ComparatorByLength());

      System.out.println("max=" + max);

      }

      }

      java.util.Arrays類能方便地操作數組,它提供的所有方法都是靜態的。具有以下功能:

      給數組賦值:通過fill方法。

      對數組排序:通過sort方法,按升序。

      比較數組:通過equals方法比較數組中元素值是否相等。

      查找數組元素:通過binarySearch方法能對排序好的數組進行二分查找法操作。

      import?java.util.Arrays;

      public?class?TestArrays?{

      public?static?void?output(int[]?array)?{

      if?(array!=null)?{

      for?(int?i?=?0;?i?

      System.out.print(array[i]+"?");

      }

      }

      System.out.println();

      }

      public?static?void?main(String[]?args)?{

      int[]?array?=?new?int[5];

      //填充數組

      Arrays.fill(array,?5);

      System.out.println("填充數組:Arrays.fill(array,?5):");

      TestArrays.output(array);

      //將數組的第2和第3個元素賦值為8

      Arrays.fill(array,?2,?4,?8);

      System.out.println("將數組的第2和第3個元素賦值為8:Arrays.fill(array,?2,?4,?8):");

      TestArrays.output(array);

      int[]?array1?=?{7,8,3,2,12,6,3,5,4};

      //對數組的第2個到第6個進行排序進行排序

      Arrays.sort(array1,2,7);

      System.out.println("對數組的第2個到第6個元素進行排序進行排序:Arrays.sort(array,2,7):");

      TestArrays.output(array1);

      //對整個數組進行排序

      Arrays.sort(array1);

      System.out.println("對整個數組進行排序:Arrays.sort(array1):");

      TestArrays.output(array1);

      //比較數組元素是否相等

      System.out.println("比較數組元素是否相等:Arrays.equals(array,?array1):"+"\n"+Arrays.equals(array,?array1));

      int[]?array2?=?array1.clone();

      System.out.println("克隆后數組元素是否相等:Arrays.equals(array1,?array2):"+"\n"+Arrays.equals(array1,?array2));

      //使用二分搜索算法查找指定元素所在的下標(必須是排序好的,否則結果不正確)

      Arrays.sort(array1);

      System.out.println("元素3在array1中的位置:Arrays.binarySearch(array1,?3):"+"\n"+Arrays.binarySearch(array1,?3));

      //如果不存在就返回負數

      System.out.println("元素9在array1中的位置:Arrays.binarySearch(array1,?9):"+"\n"+Arrays.binarySearch(array1,?9));

      }

      }

      輸出結果:

      填充數組:Arrays.fill(array, 5):5 5 5 5 5

      將數組的第2和第3個元素賦值為8:Arrays.fill(array, 2, 4, 8):5 5 8 8 5

      對數組的第2個到第6個元素進行排序進行排序:Arrays.sort(array,2,7):

      7 8 2 3 3 6 12 5 4

      對整個數組進行排序:Arrays.sort(array1):2 3 3 4 5 6 7 8 12

      比較數組元素是否相等:Arrays.equals(array, array1):

      false

      克隆后數組元素是否相等:Arrays.equals(array1, array2):true

      元素3在array1中的位置:Arrays.binarySearch(array1, 3):1

      元素9在array1中的位置:Arrays.binarySearch(array1, 9):-9

      將數組轉成List集合

      package aaa;

      import java.util.Arrays;

      import java.util.List;

      public class ArraysDemo {

      public static void main(String[] args) {

      demo_1();

      demo_2();

      }

      /**

      * Arrays.asList方法將數組轉化成List集合

      */

      public static void demo_1()

      {/*

      * 重點:List asList(數組)將數組轉成集合。

      * 好處:其實可以使用集合的方法操作數組中的元素。

      * 注意:數組的長度是固定的,所以對于集合的增刪方法是不可以使用的

      * 否則會發生UnsupportedOperationException

      */

      String[] arrStrings={"abc","haha","xixi"};

      List list=Arrays.asList(arrStrings);

      boolean b1=list.contains("xixi");

      //list.add("hehe");//UnsupportedOperationException

      System.out.println("list contains="+b1);

      }

      public static void demo_2()

      {

      /*

      * 如果數組中的元素是對象,那么轉成集合時,直接將數組中的元素作為集合中的元素進行集合存儲。

      * 如果數組中的元素是基本類型數值,那么會將該數組作為集合中的元素進行存儲。

      */

      Integer[] arrIntegers={12,32,434,55,67,87};//

      List list=Arrays.asList(arrIntegers);

      System.out.println(list);//輸出結果:[12, 32, 434, 55, 67, 87]

      int[] arr={31,11,51,61};

      List list1=Arrays.asList(arr);

      System.out.println(list1.toString());//輸出結果:[[I@154ab8e4]

      }

      }

      集合轉成數組

      package aaa;

      import java.util.ArrayList;

      import java.util.Arrays;

      import java.util.List;

      public class ToArray {

      public static void main(String[] args) {

      /*

      * 集合轉成數組呢?

      * 使用的就是Collection接口中的toArray方法。

      * 集合轉成數組:可以對集合中的元素操作的方法進行限定。不允許對其進行增刪。

      */

      List list = new ArrayList();

      list.add("abc1");

      list.add("abc2");

      list.add("abc3");

      /*

      * toArray方法需要傳入一個指定類型的數組。

      * 長度該如何定義呢?

      * 如果長度小于集合的size,那么該方法會創建一個同類型并和集合相同size的數組。

      * 如果長度大于集合的size,那么該方法就會使用指定的數組,存儲集合中的元素,其他位置默認為null。

      * 所以建議,最后長度就指定為,集合的size。

      */

      String[] arrStrings=list.toArray(new String[list.size()]);

      System.out.println(Arrays.toString(arrStrings));//輸出結果:[abc1, abc2, abc3]

      }

      }

      1、格式:

      for(類型? 變量?? :Collection集合|數組)

      {

      }

      等同于C#中的foreach

      2、傳統for和高級for的區別?

      傳統for可以完成對語句執行很多次,因為可以定義控制循環的增量和條件。

      高級for是一種簡化形式。

      它必須有被遍歷的目標。該目標要是數組,要么是Collection單列集合。

      對數數組的遍歷如果僅僅是獲取數組中的元素,可以使用高級for。

      如果要對數組的角標進行操作建議使用傳統for。

      package aaa;

      import java.util.ArrayList;

      import java.util.LinkedHashMap;

      import java.util.List;

      import java.util.Map;

      public class ForEachDemo {

      public static void main(String[] args) {

      List list = new ArrayList();

      list.add("abc1");

      list.add("abc2");

      list.add("abc3");

      for (String s:list) {//簡化書寫

      System.out.println(s);

      }

      int[] arr={2,3,3,4};

      for (int i :arr) {

      System.out.println(i);

      }

      Map map=new LinkedHashMap();

      map.put(3, "zhangsan");

      map.put(2,"wangyi");

      map.put(7,"wangwu");

      map.put(4, "zhangsansan");

      for (Integer key:map.keySet()) {

      String valueString=map.get(key);

      System.out.println(key+"::"+valueString);

      }

      for(Map.Entry me:map.entrySet())

      {

      Integer keyInteger=me.getKey();

      String valString=me.getValue();

      System.out.println(keyInteger+":"+valString);

      }

      }

      }

      輸出結果:

      abc1

      abc2

      abc3

      2

      3

      3

      4

      3::zhangsan

      2::wangyi

      7::wangwu

      4::zhangsansan

      3:zhangsan

      2:wangyi

      7:wangwu

      4:zhangsansan

      package cn.itcast.p4.news.demo;

      public class ParamterDemo {

      /**

      * @param args

      */

      public static void main(String[] args) {

      int sum = newAdd(5,1,4,7,3);

      System.out.println("sum="+sum);

      int sum1 = newAdd(5,1,2,7,3,9,8,7,6);

      System.out.println("sum1="+sum1);

      }

      /*

      * 函數的可變參數。

      * 其實就是一個數組,但是接收的是數組的元素。

      * 自動將這些元素封裝成數組。簡化了調用者的書寫。

      * 注意:可變參數類型,必須定義在參數列表的結尾。

      */

      public static int newAdd(int a,int...? arr){

      int sum = 0;

      for (int i = 0; i < arr.length; i++) {

      sum+=arr[i];

      }

      return sum;

      }

      package cn.itcast.p4.news.demo;

      import java.util.ArrayList;

      import java.util.Collections;

      import java.util.List;

      import static java.util.Collections.*;//靜態導入,其實到入的是類中的靜態成員。

      import static java.lang.System.*;

      public class StaticImportDemo {

      /**

      * @param args

      */

      public static void main(String[] args) {

      List list = new ArrayList();

      list.add("abc3");

      list.add("abc7");

      list.add("abc1");

      out.println(list);

      sort(list);//靜態導入之后,就不用寫Collections

      System.out.println(list);

      String max = max(list);

      System.out.println("max="+max);

      }

      }

      輸出結果:

      [abc1, abc3, abc7]

      max=abc7

      package aaa;

      import java.util.Properties;

      import java.util.Set;

      public class SystemDemo {

      private static final String LINE_SEPARATOR = System

      .getProperty("line.separator");// 獲取換行符,不同的系統,換行符是不一樣的。需要根據屬性來獲取,要不然可能出現不兼容的現象

      public static void main(String[] args) {

      // TODO Auto-generated method stub

      demo_1();

      demo_2();

      }

      private static void demo_2() {

      /*

      * System:類中的方法和屬性都是靜態的。

      * 常見方法: long currentTimeMillis();獲取當前時間的毫秒值。

      */

      long l2 = System.currentTimeMillis();

      System.out.println(l2);// 輸出的結果是當前時間的毫秒值

      System.out.println("hello-"+LINE_SEPARATOR+" world");//換行

      }

      /**

      * 獲取所有的屬性

      */

      private static void demo_1() {

      // 獲取系統的屬性信息,并存儲到了Properties集合中。

      /*

      * properties集合中存儲都是String類型的鍵和值。 最好使用它自己的存儲和取出的方法來完成元素的操作。

      */

      Properties properties = System.getProperties();

      Set namSet = properties.stringPropertyNames();

      for (String string : namSet) {

      String valueString = properties.getProperty(string);

      System.out.println(string + "::" + valueString);

      }

      }

      }

      在java中Runtime類表示運行時操作類,是一個封裝了JVM進程的類,每一個JVM都對應著一個Runtime類的實例,此實例由JVM運行時為其實例化。所以在JDK文檔中讀者不會發現任何有關Runtime類中構造方法的定義,這是因為Runtime類本身的構造方法是私有化的(單例設計),如果想要得到一個Runtime實例,只有以下方法:

      Runtime run=Runtime.getRuntime();

      也就是說在Runtime類中提供了一個靜態的getRuntime()方法,此類可以取得Runtime類的實例,然后通過Runtime就可以取得一些系統的信息。如,getRuntime(),取得Runtime實例;freeMemory()返回java虛擬機中的空閑內存量;maxMemory()返回JVM的最大內存量;gc()運行垃圾回收器,釋放空間;exec(command)執行本機命令。

      package aaa;

      import java.io.IOException;

      public class RuntimeDemo {

      public static void main(String[] args) throws IOException,

      InterruptedException {

      // TODO Auto-generated method stub

      Runtime runtime = Runtime.getRuntime();

      Process p = runtime.exec("notepad.exe");

      Thread.sleep(5000);

      p.destroy();// 銷毀進程

      runtime.gc();// 垃圾回收

      runtime.exec("notepad.exe c:\RuntimeDemo.java");//用notepad.exe打開RuntimeDemo文件

      }

      }

      package aaa;

      import java.util.Random;

      public class MathDemo {

      public static void main(String[] args) {

      // TODO Auto-generated method stub

      /*

      * Math:提供了操作數學運算的方法。都是靜態的。

      * 常用的方法:

      * ceil():返回大于參數的最小整數。

      * floor():返回小于參數的最大整數。

      * round():返回四舍五入的整數。

      * pow(a,b):a的b次方。

      */

      double d1 = Math.ceil(12.56);

      double d2 = Math.floor(12.56);

      double d3 = Math.round(12.46);

      sop("d1="+d1);

      sop("d2="+d2);

      sop("d3="+d3);

      double d = Math.pow(10, 2);

      sop("d="+d);

      //第一種? 輸出1到10 的隨機數

      for (int i = 0; i < 10; i++) {

      double d4=(int)(Math.random()*10+1);

      System.out.println(d4);

      }

      //第二種? 輸出1到10 的隨機數

      Random random=new Random();

      for (int i = 0; i < 10; i++) {

      double d5=(int)(random.nextDouble()*10+1);

      System.out.println(d5);

      int d6=random.nextInt(10)+1;

      System.out.println(d6);

      }

      }

      public static void sop(String string) {

      System.out.println(string);

      }

      }

      package aaa;

      import java.text.DateFormat;

      import java.text.ParseException;

      import java.text.SimpleDateFormat;

      import java.util.Date;

      public class DateDemo {

      public static void main(String[] args) throws ParseException {

      // TODO Auto-generated method stub

      demo_1();

      demo_2();

      demo_3();

      }

      /**

      * 將日期格式的字符串-->日期對象。

      * ? 使用的是DateFormat類中的parse()方法。

      * @throws ParseException

      */

      private static void demo_3() throws ParseException {

      // TODO Auto-generated method stub

      String str_Date = "2015年4月12日";

      DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);

      Date date = dateFormat.parse(str_Date);

      System.out.println(date);

      //自定義格式轉換為日期對象

      str_Date="2015---08--12";

      dateFormat=new SimpleDateFormat("yyyy---MM--dd");

      date=dateFormat.parse(str_Date);

      System.out.println(date);

      }

      /**

      * 對日期對象進行格式化。 將日期對象-->日期格式的字符串。 使用的是DateFormat類中的format方法。

      */

      private static void demo_2() {

      // TODO Auto-generated method stub

      Date date = new Date();

      DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);// 格式化日期

      System.out.println(dateFormat.format(date));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,

      DateFormat.LONG);// 格式化日期和時間

      System.out.println(dateFormat.format(date));

      // 自定義風格

      dateFormat = new SimpleDateFormat("yyyy--MM--dd");

      String stringDate = dateFormat.format(date);

      System.out.println(stringDate);

      }

      /**

      * 日期對象和毫秒值之間的轉換。

      *

      * 毫秒值-->日期對象 : 1,通過Date對象的構造方法 new Date(timeMillis); 2,還可以通過setTime設置。

      * 因為可以通過Date對象的方法對該日期中的各個字段(年月日等)進行操作。 日期對象-->毫秒值: 2,getTime方法。

      * 因為可以通過具體的數值進行運算。

      */

      private static void demo_1() {

      Date date = new Date();// 將當前日期和時間封裝成Date對象。

      System.out.println(date);// Sun

      Apr

      29 11:48:02 CST 2012

      long time = System.currentTimeMillis();

      Date date1 = new Date(time);

      System.out.println(date1);

      }

      }

      練習: "2012-3-17"到"2012-4-6"中間有多少天?

      import java.text.DateFormat;

      import java.text.ParseException;

      import java.text.SimpleDateFormat;

      import java.util.Date;

      /*

      * 思路:兩個日期相減就哦了。

      * 咋減呢?必須要有兩個可以進行減法運算的數。

      * 能減可以是毫秒值。如何獲取毫秒值?通過date對象。

      * 如何獲取date對象呢?可以將字符串轉成date對象。

      * 1,將日期格式的字符串轉成Date對象。2,將Date對象轉成毫秒值。3,相減,在變成天數

      */

      public class DateTest {

      public static void main(String[] args) throws ParseException {

      String str_date1 = "2012-3-17";

      String str_date2 = "2012-4-18";

      test(str_date1,str_date2);

      }

      public static void test(String str_date1,String str_date2) throws ParseException {

      DateFormat dateFormat = DateFormat.getDateInstance();//定義日期格式對象。

      dateFormat = new SimpleDateFormat("yyyy-MM-dd");

      Date date1 = dateFormat.parse(str_date1); //1,將日期字符串轉成日期對象。

      Date date2 = dateFormat.parse(str_date2);

      long time1 = date1.getTime();

      long time2 = date2.getTime();

      long time = Math.abs(time1-time2);

      int day = getDay(time);

      System.out.println(day);

      }

      private static int getDay(long time) {

      int day = (int)(time/1000/60/60/24);

      return day;

      }

      }

      從JDK1.1版本開始,在處理日期和時間時,系統推薦使用Calendar類進行實現。在設計上,Calendar類的功能要比Date類強大很多,而且在實現方式上也比Date類要復雜一些,下面就介紹一下Calendar類的使用。

      Calendar類是一個抽象類,在實際使用時實現特定的子類的對象,創建對象的過程對程序員來說是透明的,只需要使用getInstance方法創建即可。

      1、使用Calendar類代表當前時間

      Calendar c = Calendar.getInstance();

      由于Calendar類是抽象類,且Calendar類的構造方法是protected的,所以無法使用Calendar類的構造方法來創建對象,API中提供了getInstance方法用來創建對象。

      使用該方法獲得的Calendar對象就代表當前的系統時間,由于Calendar類toString實現的沒有Date類那么直觀,所以直接輸出Calendar類的對象意義不大。

      2、使用Calendar類代表指定的時間

      Calendar c1 = Calendar.getInstance();

      c1.set(2009, 3 - 1, 9);

      使用Calendar類代表特定的時間,需要首先創建一個Calendar的對象,然后再設定該對象中的年月日參數來完成。

      set方法的聲明為:

      public final void set(int year,int month,int date)

      以上示例代碼設置的時間為2009年3月9日,其參數的結構和Date類不一樣。Calendar類中年份的數值直接書寫,月份的值為實際的月份值減1,日期的值就是實際的日期值。

      如果只設定某個字段,例如日期的值,則可以使用如下set方法:

      public void set(int field,int value)

      在該方法中,參數field代表要設置的字段的類型,常見類型如下:

      Calendar.YEAR——年份

      Calendar.MONTH——月份

      Calendar.DATE——日期

      Calendar.DAY_OF_MONTH——日期,和上面的字段完全相同

      Calendar.HOUR——12小時制的小時數

      Calendar.HOUR_OF_DAY——24小時制的小時數

      Calendar.MINUTE——分鐘

      Calendar.SECOND——秒

      Calendar.DAY_OF_WEEK——星期幾

      后續的參數value代表,設置成的值。例如:

      c1.set(Calendar.DATE,10);

      該代碼的作用是將c1對象代表的時間中日期設置為10號,其它所有的數值會被重新計算,例如星期幾以及對應的相對時間數值等。

      3、獲得Calendar類中的信息

      Calendar c2 = Calendar.getInstance();

      int year = c2.get(Calendar.YEAR); //年份

      int month = c2.get(Calendar.MONTH) + 1; //月份

      int date = c2.get(Calendar.DATE); //日期

      int hour = c2.get(Calendar.HOUR_OF_DAY); //小時

      int minute = c2.get(Calendar.MINUTE); //分鐘

      int second = c2.get(Calendar.SECOND); ? //秒

      int day = c2.get(Calendar.DAY_OF_WEEK); //星期幾

      System.out.println("年份:" + year);

      System.out.println("月份:" + month);

      System.out.println("日期:" + date);

      System.out.println("小時:" + hour);

      System.out.println("分鐘:" + minute);

      System.out.println("秒:" + second);

      System.out.println("星期:" + day);

      使用Calendar類中的get方法可以獲得Calendar對象中對應的信息,get方法的聲明如下:public int get(int field)

      其中參數field代表需要獲得的字段的值,字段說明和上面的set方法保持一致。需要說明的是,獲得的月份為實際的月份值減1,獲得的星期的值和Date類不一樣。在Calendar類中,周日是1,周一是2,周二是3,依次類推。

      4、其它方法說明

      其實Calendar類中還提供了很多其它有用的方法,下面簡單的介紹幾個常見方法的使用。

      a、add方法:public abstract void add(int field,int amount)

      該方法的作用是在Calendar對象中的某個字段上增加或減少一定的數值,增加是amount的值為正,減少時amount的值為負。

      例如在計算一下當前時間100天以后的日期,代碼如下:

      Calendar c3 = Calendar.getInstance();

      c3.add(Calendar.DATE, 100);

      int year1 = c3.get(Calendar.YEAR);

      int month1 = c3.get(Calendar.MONTH) + 1; //月份

      int date1 = c3.get(Calendar.DATE); //日期

      System.out.println(year1 + "年" + month1 + "月" + date1 + "日");

      這里add方法是指在c3對象的Calendar.DATE,也就是日期字段上增加100,類內部會重新計算該日期對象中其它各字段的值,從而獲得100天以后的日期,例如程序的輸出結果可能為:?2009年6月17日

      b、after方法:public boolean after(Object when)

      該方法的作用是判斷當前日期對象是否在when對象的后面,如果在when對象的后面則返回true,否則返回false。例如:

      Calendar c4 = Calendar.getInstance();

      c4.set(2009, 10 - 1, 10);

      Calendar c5 = Calendar.getInstance();

      c5.set(2010, 10 - 1, 10);

      boolean b = c5.after(c4);

      System.out.println(b);

      在該示例代碼中對象c4代表的時間是2009年10月10號,對象c5代表的時間是2010年10月10號,則對象c5代表的日期在c4代表的日期之后,所以after方法的返回值是true。另外一個類似的方法是before,該方法是判斷當前日期對象是否位于另外一個日期對象之前。

      c、getTime方法:public final Date getTime()

      該方法的作用是將Calendar類型的對象轉換為對應的Date類對象,兩者代表相同的時間點。

      類似的方法是setTime,該方法的作用是將Date對象轉換為對應的Calendar對象,該方法的聲明如下:public final void setTime(Date date)

      轉換的示例代碼如下:

      Date d = new Date();

      Calendar c6 = Calendar.getInstance();

      Date d1 = c6.getTime();???? //Calendar類型的對象轉換為Date對象

      Calendar c7 = Calendar.getInstance();

      c7.setTime(d); //Date類型的對象轉換為Calendar對象

      5、Calendar對象和相對時間之間的互轉

      Calendar c8 = Calendar.getInstance();

      long t = 1252785271098L;

      long t1 = c8.getTimeInMillis();??? //將Calendar對象轉換為相對時間

      Calendar c9 = Calendar.getInstance();

      c9.setTimeInMillis(t1); //將相對時間轉換為Calendar對象

      在轉換時,使用Calendar類中的getTimeInMillis方法可以將Calendar對象轉換為相對時間。在將相對時間轉換為Calendar對象時,首先創建一個Calendar對象,然后再使用Calendar類的setTimeInMillis方法設置時間即可。

      應用示例

      下面以兩個簡單的示例介紹時間和日期處理的基本使用。

      1、計算兩個日期之間相差的天數

      例如計算2010年4月1號和2009年3月11號之間相差的天數,則可以使用時間和日期處理進行計算。

      該程序實現的原理為:首先代表兩個特定的時間點,這里使用Calendar的對象進行代表,然后將兩個時間點轉換為對應的相對時間,求兩個時間點相對時間的差值,然后除以1天的毫秒數(24小時X60分鐘X60秒X1000毫秒)即可獲得對應的天數。實現該示例的完整代碼如下:

      import java.util.*;

      /**

      *?計算兩個日期之間相差的天數

      */

      public class DateExample1 {

      public static void main(String[] args) {

      //設置兩個日期

      Java-Collections總結(java中Collections)

      Calendar c1 = Calendar.getInstance();

      c1.set(2009, 3 - 1, 11); //日期:2009年3月11號

      Calendar c2 = Calendar.getInstance();

      c2.set(2010, 4 - 1, 1); ?? //日期:2010年4月1號

      //轉換為相對時間

      long t1 = c1.getTimeInMillis();

      long t2 = c2.getTimeInMillis();

      long days = (t2 - t1)/(24 * 60 * 60 * 1000); //計算天數

      System.out.println(days);

      }

      }

      2、輸出當前月的月歷

      該示例的功能是輸出當前系統時間所在月的日歷,例如當前系統時間是2009年3月10日,則輸出2009年3月的日歷。

      該程序實現的原理為:首先獲得該月1號是星期幾,然后獲得該月的天數,最后使用流程控制實現按照日歷的格式進行輸出即可。即如果1號是星期一,則打印一個單位的空格,如果1號是星期二,則打印兩個單位的空格,依次類推。打印完星期六的日期以后,進行換行。實現該示例的完整代碼如下:

      public class DateExample2{

      public static void main(String[] args){

      //獲得當前時間

      Calendar c = Calendar.getInstance();

      c.set(Calendar.DATE,1); ? //設置代表的日期為1號

      int start = c.get(Calendar.DAY_OF_WEEK); //獲得1號是星期幾

      int maxDay = c.getActualMaximum(Calendar.DATE);?//獲得當前月的最大日期數

      //輸出標題

      System.out.println("星期日?星期一?星期二?星期三?星期四?星期五???星期六");

      //輸出開始的空格

      for(int i = 1;i < start;i++){

      System.out.print("????? ");

      }

      //輸出該月中的所有日期

      for(int i = 1;i <= maxDay;i++){

      System.out.print(" " + i); ?? //輸出日期數字

      System.out.print("???? "); //輸出分隔空格

      if(i < 10){System.out.print(' ');}

      //判斷是否換行

      if((start + i - 1) % 7 == 0){? System.out.println();???}

      }

      System.out.println();???????//換行

      }

      }

      package cn.itcast.p1.otherapi;

      import java.util.Calendar;

      public class CalendarDemo {

      public static void main(String[] args) {

      Calendar c = Calendar.getInstance();

      int year = 2012;

      showDays(year);

      }

      //求二月份有多少天,思路:三月份第一天減一得到二月最后一天的天數

      public static void showDays(int year) {

      Calendar c = Calendar.getInstance();

      c.set(year, 2, 1);

      c.add(Calendar.DAY_OF_MONTH, -1);

      showDate(c);

      }

      //獲取Calendar對象的時間屬性

      public static void showDate(Calendar c) {

      int year = c.get(Calendar.YEAR);

      int month = c.get(Calendar.MONTH)+1;

      int day = c.get(Calendar.DAY_OF_MONTH);

      int week = c.get(Calendar.DAY_OF_WEEK);

      System.out.println(year+"年"+month+"月"+day+"日"+getWeek(week));

      }

      public static String getWeek(int i) {

      String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

      return weeks[i];

      }

      }

      Java 數據結構

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:[當人工智能遇上安全] 6.基于機器學習的入侵檢測和攻擊識別——以KDD CUP99數據集為例(人工智能的安全問題不容忽視)
      下一篇:Scrum Master能力說明 - Scrum Master八個姿勢白皮書(scrum master)
      相關文章
      亚洲国产精品无码久久九九大片 | 久久精品国产亚洲AV果冻传媒| 亚洲av高清在线观看一区二区| 91在线亚洲精品专区| 亚洲国产人成中文幕一级二级| 亚洲精品乱码久久久久久V| 亚洲一二成人精品区| 国产亚洲av片在线观看16女人| 亚洲精品无码激情AV| 亚洲成网777777国产精品| 狼人大香伊蕉国产WWW亚洲| 国产成人亚洲精品无码AV大片| 日韩亚洲国产二区| 一本色道久久88亚洲综合| www亚洲一级视频com| 亚洲日本一区二区三区在线不卡| 亚洲欧洲一区二区三区| 久久久久一级精品亚洲国产成人综合AV区 | 亚洲人成网77777亚洲色 | 亚洲精品乱码久久久久久| 亚洲精品一区二区三区四区乱码| 麻豆亚洲AV永久无码精品久久| 亚洲综合色一区二区三区小说| 亚洲国产午夜精品理论片| 最新国产成人亚洲精品影院| 亚洲色欲色欱wwW在线| 亚洲AⅤ男人的天堂在线观看| 久久人午夜亚洲精品无码区| 亚洲AV无码一区二区乱子仑| 亚洲国产精品自在拍在线播放| 国产亚洲色婷婷久久99精品91| 国产亚洲av片在线观看播放| 久久久婷婷五月亚洲97号色 | 亚洲无线一二三四区手机| 亚洲区小说区图片区| 亚洲国产精品一区二区成人片国内| 亚洲AV福利天堂一区二区三| 亚洲国产av美女网站| 亚洲色丰满少妇高潮18p| 亚洲AⅤ永久无码精品AA| 亚洲熟妇丰满多毛XXXX|