對象排序java
㈠ java如何實現復雜對象的排序
List<List> list = new ArrayList<List>();
Collections.sort(list, new Comparator<List>(){
//重寫排序規則
public int compare(List o1, List o2) {
return 0;
}
});
裡面那個可以List可以封裝成bean,這樣就可以在bean里繼承Comparator,實現排序方法。一次排序不行可以多次排,關鍵看你的排序規則要寫對。
㈡ java對象數組排序
沒有必要建立一個class A出來的,用ArrayList 或者inertor或者set都可以有函數方法實現排序。
㈢ 用java程序對集合里的對象排序
要對對象排序,首先要在設計對象所屬類時實現Comparable介面。然後再CompareTo方法中設定排序規則。如要按漢字的拼音排序,可以調用CnToSpell.getFullSpell("字元串")方法,將漢字轉換成拼音字元串,然後調用字元串的比較函數即可。CnToSpell類可以上網查一下在那個包中,記不得了。
㈣ 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 如何對對象進行排序
糾正幾點錯誤:
首先TreeSet就是一個二叉樹排序容器,由用戶定義對象比較規則,然後介面回調進行排序,也就是說當對象在add到容器後實際上已經按照你定義的排序規則排序完畢了,所以你也沒有必要再單獨寫一個排序方法。
如果你想單獨寫一個排序演算法,傳送TreeSet()這樣已經排序完畢的容器當然是多此一舉的。 你可以用List保存你的對象,這樣容器保存的就是原始的對象集合(按add()的先後順序排序),這樣才能真正發揮排序方法的功能.
其次,你的冒泡排序演算法是按照價格從小到大的,而你add對象的時候就是從小到大的,所以一直沒有滿足if(iArr[j].price > iArr[j+1].price) { 這個條件,可以把>號改成<號,或者打亂add的順序,這樣就能看出效果。
另外從容器內取元素應該用循環,而不應該寫死。你應該知道,所以程序我也沒修改~
下面的程序在原作上面稍微修改了一下,自己可以比較一下區別
package cn.com.csuinfo.Mycollec;
import java.util.ArrayList;
import java.util.List;
public class TestMySort {
public void BubbleSort(List<Car> list) {
Car c1;
Car c2;
Car c3;
Car c4;
c1 = list.get(0);// 將set中的元素一個個取出來,再存入Car數組中
c2 = list.get(1);
c3 = list.get(2);
c4 = list.get(3);
Car[] iArr = { c1, c2, c3, c4 }; // 數組中存放了Car類型的四個對象
Car tmp = null;
int len = list.size();
for (int i = 0; i < len - 1; i++) {// 對數組中的對象按屬性值price的大小進行排序
for (int j = 0; j < len - 1 - i; j++) {
if (iArr[j].price < iArr[j + 1].price) {
tmp = iArr[j];
iArr[j] = iArr[j + 1];
iArr[j + 1] = tmp;
System.out.println("change");// 測試之注意!:程序沒執行到此來???
}
}
}
for (Car car : iArr) {
System.out.println(car);
}
}
public static void main(String[] args) {
List<Car> list = new ArrayList<Car>();
Car car1 = new Car("Ford", 164000);
Car car2 = new Car("Honda", 286000);
Car car3 = new Car("Toyota", 410000);
Car car4 = new Car("Benz", 850000);
list.add(car1);
list.add(car2);
list.add(car3);
list.add(car4);
System.out.println("***********************「");
new TestMySort().BubbleSort(list);
}
}
㈥ JAVA 數組中的元素是對象,如何給對象排序
寫那麼麻煩干什麼呢,看我的!
Book[]books={newBook("j2me",12),newBook("j2se",5),newBook("j2ee",22)};
Arrays.sort(books,newComparator<Book>()
{
@Override
publicintcompare(Booko1,Booko2)
{
if(o1.getPrice()>o2.getPrice())
{
return1;
}
elseif(o1.getPrice()<o2.getPrice())
{
return-1;
}
else
{
return0;
}
}
});
㈦ java對象數組排序中如何讓性別為女的排在前面
可以使用if判斷的方法來將性別為女的排在前面,Java是一門面向對象的編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。
㈧ java 如何對自定義的對象進行排序
//把排序規則交給sort方法。該方法就回按照你自定義的規則進行排序 java.util.Arrays.sort(users,new MyComparator()); for (int i = 0; i<users.length; i++){ System.out.println (users[i]);}}}class User{ String name;int age ; public User(String name,int age){ this.name = name; this.age = age;} public String toString(){ return name+":::"+age;}}class MyComparator implements Comparator{ public int compare(Object obj1, Object obj2 ){ User u1 = (User)obj1; User u2 = (User)obj2; if(u1.ageu2.age){return 1;}else if(u1.age<u2.age){return -1;}else{//利用String自身的排序方法。 //如果年齡相同就按名字進行排序
㈨ Java怎樣用數組創建對象,並對對象里的屬性排序
publicclassEmployee{
publicEmployee(){
super();
//TODOAuto-generatedconstructorstub
}
publicEmployee(Stringno,Stringname,Floatsalary){
super();
this.no=no;
this.name=name;
this.salary=salary;
}
privateStringno;//工號
privateStringname;//姓名
privateFloatsalary=0f;//工資
publicStringgetNo(){
returnno;
}
publicvoidsetNo(Stringno){
this.no=no;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicFloatgetSalary(){
returnsalary;
}
publicvoidsetSalary(Floatsalary){
this.salary=salary;
}
@Override
publicStringtoString(){
return"Employee[no="+no+",name="+name+",salary="+salary+"]";
}
}
publicclassTestEmployee{
publicstaticvoidmain(String[]args){
TestEmployeetestEmployee=newTestEmployee();
Employee[]emps=testEmployee.getEmployees();
emps=testEmployee.orderBySalary(emps);
for(inti=0;i<emps.length;i++){
System.out.println(emps[i]);
}
}
/**
*獲取一個隨機工資數3-5K
*@return
*/
publicFloatgetRandomFloat(){
DecimalFormatdcmFmt=newDecimalFormat("0.00");
Randomrand=newRandom();
floatf=0f;
while(f<3000){
f=rand.nextFloat()*5000;
}
returnFloat.parseFloat(dcmFmt.format(f));
}
/**
*獲取員工
*@return返回Employee[]數組length=50
*/
publicEmployee[]getEmployees(){
Employee[]emps=newEmployee[50];
for(inti=0;i<50;i++){
Stringno="no"+i;//初始化員工號
Stringname="name"+i;//初始化姓名
Floatsalary=getRandomFloat();//隨機產生一個工資數
emps[i]=newEmployee(no,name,salary);
}
returnemps;
}
/**
*根據工資高低進行排序
*@paramemps
*@return
*/
publicEmployee[]orderBySalary(Employee[]emps){
for(inti=0;i<emps.length;i++){
for(intj=i+1;j<emps.length;j++){
if(emps[i].getSalary()<emps[j].getSalary()){
Employeetemp=emps[i];
emps[i]=emps[j];
emps[j]=temp;
}
}
}
returnemps;
}
}
㈩ JAVA 數組中的元素是對象,如何給對象排序
Book[]books={newBook("j2me",12),newBook("j2se",5),newBook("j2ee",22)};
Arrays.sort(books,newComparator<Book>()
{
@Override
publicintcompare(Booko1,Booko2)
{
if(o1.getPrice()>o2.getPrice())
{
return1;
}
elseif(o1.getPrice()<o2.getPrice())
{
return-1;
}
else
{
return0;
}
}
});
