本文目錄一覽:
java自動排序函數…….
要實現排序功能,一般有兩種途徑,這裡對基本類型不適用,基本類型一般有Arrays中的靜態方法.
1.對象本身實現Comparable介面,那麼該類的實例就是可以排序的.
有關Comparable:
只要實現了Comparable介面,就可以調用Collections的sort方法對集合中的元素排序.
2.指定一個Comparator,也就是實現了Comparator的類的一個實例.
但是Java本身只提供了一個Comparator的實現,就是Collections.reverseOrder().
該方法返回的是一個已經實現了Comparable介面的反序.
看一下Comparator的全部內容:
public interface Comparator {
int compare(Object o1, Object o2);
boolean equals(Object obj);
}
定義了兩個方法,其實我們一般都只需要實現compare方法就行了,因為類都是默認從Object繼承
所以會使用Object的equals方法.
Comparator一般都作為一個匿名類出現,對於沒有實現Comparable的對象的集合,排序的時候
需要指定一個Comparator.
這裡舉例說明
對於實現了Comparable的類我們就用最簡單的Integer
List list=new ArrayList();
list.add(new Integer(3));
list.add(new Integer(53));
list.add(new Integer(34));
Collections.sort(list);
對於沒有實現Comparable的,我們就用Object,按照hashCode大小來排序.
List list= new ArrayList();
list.add(new Object());
list.add(new Object());
list.add(new Object());
Collections.sort(list,new Comparator(){ public int compare(Object o1, Object o2){
return (o1.hashCode()-o2.hashCode());
})
Java中怎麼給一個對象排序
Comparable 是一個自身以前支持自比擬的(如String ,Integer) 的介面 Comparator 可以說是一個 自用的比擬器 當對象自身 不支持自排序和自比擬函數的時辰 咱們可以議決完成Compartor 來比擬兩對象的大小 Comparable 是一個比擬通用的介面 用戶可以議決他完成 排序功用 而Comparator 可以看作一種演算法 一種設計方式 (可以看作是一個戰略方式 就是不改動對象自身,而用一個戰略對象改動對象行為) Comparable 相比擬較固定 與詳細類綁定 , Comparator 比擬靈敏 可以與任何須要完成功用的類 綁定 Comparable 可以說是 靜態綁定 Comparator 可以說是靜態綁定 Comparable 此介面強行對完成它的每個類的對象執行全體排序。此排序被稱為該類的自然排序,類的 compareTo 方法被稱為它的自然比擬方法。 完成此介面的對象列表(和數組)可以議決 Collections.sort(和 Arrays.sort)執行自動排序。完成此介面的對象可以用作有序映射表中的鍵或有序集合中的元素,無需指定比擬器。 關於類 C 的每一個 e1 和 e2 來說,當且僅當 (e1.compareTo((Object)e2) == 0) 與 e1.equals((Object)e2) 具有類似的布爾值時,類 C 的自然排序才叫做與 equals 一致。留意,null 不是任何類的實例,即便 e.equals(null) 前往 false,e.compareTo(null) 也會拋出 NullPointerException。 劇烈推薦(雖然不是必需的)使自然排序與 equals 一致。這是由於在運用其自然排序與 equals 不一致的元素(或鍵)時,沒有顯式比擬器的有序集合(和有序映射表)行為表現「怪異」。尤其是,這樣的有序集合(或有序映射表)違犯了依據 equals 方法定義的集合(或映射表)的慣例協議。 而Comparator 比擬函數強行對某些對象 collection 執行全體排序。可以將 Comparator 傳遞給 sort 方法(如 Collections.sort),從而准許在排序順序上完成精確控制。還可以運用 Comparator 來控制某些數據結構(如 TreeSet 或 TreeMap)的順序。
JAVA中有哪幾種常用的排序方法
1、冒泡排序
冒泡排序是一個比較簡單的排序方法。在待排序的數列基本有序的情況下排序速度較快。若要排序的數有n個,則需要n-1輪排序,第j輪排序中,從第一個數開始,相鄰兩數比較,若不符合所要求的順序,則交換兩者的位置;直到第n+1-j個數為止,第一個數與第二個數比較,第二個數與第三個數比較,……,第n-j個與第n+1-j個比較,共比較n-1次。此時第n+1-j個位置上的數已經按要求排好,所以不參加以後的比較和交換操作。例如:第一輪排序:第一個數與第二個數進行比較,若不符合要求的順序,則交換兩者的位置,否則繼續進行二個數與第三個數比較……。直到完成第n-1個數與第n個數的比較。此時第n個位置上的數已經按要求排好,它不參與以後的比較和交換操作;第二輪排序:第一個數與第二個數進行比較,……直到完成第n-2個數與第n-1個數的比較;……第n-1輪排序:第一個數與第二個數進行比較,若符合所要求的順序,則結束冒泡法排序;若不符合要求的順序,則交換兩者的位置,然後結束冒泡法排序。
共n-1輪排序處理,第j輪進行n-j次比較和至多n-j次交換。
從以上排序過程可以看出,較大的數像氣泡一樣向上冒,而較小的數往下沉,故稱冒泡法。
2、選擇排序
選擇法的原理是先將第一個數與後面的每一個數依次比較,不斷將將小的賦給第一個數,從而找出最小的,然後第二個數與後面的每一個數依次比較,從而找出第二小的,然後第三個數與後面的
3、插入排序
插入排序的原理是對數組中的第i個元素,認為它前面的i-1個已經排序好,然後將它插入到前面的i-1個元素中。插入排序對少量元素的排序較為有效.
4、快速排序
快速排序是對冒泡排序的一種改進。它的基本思想是:通過一次排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按次方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此大道整個數據變成有序序列。
如何在Java中從鍵盤輸入10個數,用選擇法按降序排序並輸出?
在Java中在數組中保存10個數,調用下面的排序函數,用選擇法按降序排序:public static void selectionSort(int[] arr){ for (int i = 0; i arr.length – 1; i++) { int max = i; for (int j = i + 1; j arr.length; j++) { if (arr[max] arr[j]) { max = j; } } if (max != i) { int tmp = arr[max]; arr[max] = arr[i]; arr[i] = tmp; } } }
java常用函數方法
Java的一些常用函數,方法總結:
1:數組方面:
數組是一個對象,數組名可以理解和C++裡面一樣,
1):System.arraycopy(src,srcindex,dst,dstindex,src.length);
2):java.util.Arrays.sort(數組名);//塊數排序法進行排序
3):java.util.Arrays.binarySearch(arr,key);//從哪裡收,關鍵值,返回索引.沒有的話返回-1
4):java.util.Array.fill(arr,value),設置數組初始值
5):Array.equals(arr1,arr2)//比較兩個數組中元素是不是全部相等,是返回true,不是返回false
2:時間方面:
public static String dateToStr(java.util.Date date)
{
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String str = sdf.format(date);
return str;
}
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class DateUtil
{
public static java.util.Date parseDate(String dateStr, String format)
{
java.util.Date date = null;
try
{
java.text.DateFormat df = new java.text.SimpleDateFormat(format);
String dt = dateStr.replaceAll(“-“, “/”);
if ((!dt.equals(“”)) (dt.length() format.length()))
{
dt += format.substring(dt.length()).replaceAll(“[YyMmDdHhSs]”, “0”);
}
date = (java.util.Date) df.parse(dt);
}
catch (Exception e)
{
}
return date;
}
public static java.util.Date parseDate(String dateStr)
{
return parseDate(dateStr, “yyyy/MM/dd”);
}
public static String format(java.util.Date date, String format)
{
String result = “”;
try
{
if (date != null)
{
java.text.DateFormat df = new java.text.SimpleDateFormat(format);
result = df.format(date);
}
}
catch (Exception e)
{
}
return result;
}
public static String format(java.util.Date date)
{
return format(date, “yyyy/MM/dd”);
}
public static int getYear(java.util.Date date)
{
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.YEAR);
}
public static int getMonth(java.util.Date date)
{
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.MONTH) + 1;
}
public static int getDay(java.util.Date date)
{
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.DAY_OF_MONTH);
}
public static int getHour(java.util.Date date)
{
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.HOUR_OF_DAY);
}
public static int getMinute(java.util.Date date)
{
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.MINUTE);
}
public static int getSecond(java.util.Date date)
{
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.SECOND);
}
public static long getMillis(java.util.Date date)
{
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.getTimeInMillis();
}
public static String getDate(java.util.Date date)
{
return format(date, “yyyy/MM/dd”);
}
public static String getTime(java.util.Date date)
{
return format(date, “HH:mm:ss”);
}
public static String getDateTime(java.util.Date date)
{
return format(date, “yyyy/MM/dd HH:mm:ss”);
}
public static java.util.Date addDate(java.util.Date date, int day)
{
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTimeInMillis(getMillis(date) + ((long) day) * 24 * 3600 * 1000);
return c.getTime();
}
public static int diffDate(java.util.Date date, java.util.Date date1)
{
return (int) ((getMillis(date) – getMillis(date1)) / (24 * 3600 * 1000));
}
public static String getMonthBegin(String strdate)
{
java.util.Date date = parseDate(strdate);
return format(date, “yyyy-MM”) + “-01”;
}
public static String getMonthEnd(String strdate)
{
java.util.Date date = parseDate(getMonthBegin(strdate));
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_YEAR, -1);
return formatDate(calendar.getTime());
}
public static String formatDate(java.util.Date date)
{
return formatDateByFormat(date, “yyyy-MM-dd”);
}
public static String formatDateByFormat(java.util.Date date, String format)
{
String result = “”;
if (date != null)
{
try
{
SimpleDateFormat sdf = new SimpleDateFormat(format);
result = sdf.format(date);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
return result;
}
}
Java日期格式化及其使用例子
1 SimpleDateFormat擔當重任,怎樣格式化都行
import java.util.Date;
import java.text.SimpleDateFormat;
public class Demo
{
public static void main(String[] args)
{
Date now=new Date();
SimpleDateFormat f=newSimpleDateFormat(“今天是”+”yyyy年MM月dd日 E kk點mm分”);
System.out.println(f.format(now));
f=new SimpleDateFormat(“a hh點mm分ss秒”);
System.out.println(f.format(now));
}
}
2 從字元串到日期類型的轉換:
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.text.*;
publicclass Demo
{
public static void main(String[] args)
{
String strDate=”2005年04月22日”;
//注意:SimpleDateFormat構造函數的樣式與strDate的樣式必須相符
SimpleDateFormat simpleDateFormat=new SimpleDateFormat(“yyyy年MM月dd日”);
//必須捕獲異常
try
{
Date date=simpleDateFormat.parse(strDate);
System.out.println(date);
}
catch(ParseException px)
{
px.printStackTrace();
}
}
}
3 將毫秒數換轉成日期類型
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.text.*;
public class Demo
{
public static void main(String[] args)
{
long now=System.currentTimeMillis();
System.out.println(“毫秒數:”+now);
Date dNow=new Date(now);
System.out.println(“日期類型:”+dNow);
}
}
4 獲取系統時期和時間,轉換成SQL格式後更新到資料庫
java.util.Date d=new java.util.Date(); //獲取當前系統的時間
//格式化日期
new java.text.SimpleDateFormat s= new java.text.SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String dateStr = s.format(d); //轉為字元串
使用RS更新資料庫,仍然要用rs.updateString,而不是rs.updateDade。
rs.updateString(“regtime”,dateStr); //regtime欄位為datetime類型的
5 按本地時區輸出當前日期
Date myDate = new Date();
System.out.println(myDate.toLocaleString());
輸出結果為:
2003-5-30
6 如何格式化小數
DecimalFormat df = new DecimalFormat(“,###.00”);
double aNumber = 33665448856.6568975;
String result = df.format(aNumber);
Sytem. out.println(result);
輸出結果為:
33,665,448,856.66
其他:獲取毫秒時間 System.currentTimeMillis();
7 在資料庫里的日期只以年-月-日的方式輸出
定義日期格式:SimpleDateFormat sdf = new SimpleDateFormat(yy-MM-dd);
sql語句為:String sqlStr = “select bookDate from roomBook where bookDate between ‘2007-4-10’ and ‘2007-4-25′”;
輸出:
System.out.println(df.format(rs.getDate(“bookDate”)));
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/191936.html