我有个题目,是这样的。用Arrilist 进行排序。
import java.util.*;public class ListHome {
public static void main(String args[])
{
ArrayList<Integer> arrayList=new ArrayList<Integer>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(4);
Collections.sort(List<Integer> arrayList);
}
}
目的要求使用:Collections 里面的 sort方法进行排序,感觉很复杂 又要用到泛型和接口 实在不会了。
static <T extends Comparable<? super T>> void sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。
或者 static <T> void sort(List<T> list, Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。 实在不会了,请高手将字符 升序排。要代码。 我写到上面就不会了。
import java.util.*;public class ListHome {
public static void main(String args[])
{
ArrayList<Integer> arrayList=new ArrayList<Integer>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(4);
Collections.sort(List<Integer> arrayList);
}
}
目的要求使用:Collections 里面的 sort方法进行排序,感觉很复杂 又要用到泛型和接口 实在不会了。
static <T extends Comparable<? super T>> void sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。
或者 static <T> void sort(List<T> list, Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。 实在不会了,请高手将字符 升序排。要代码。 我写到上面就不会了。
import java.util.ArrayList;
import java.util.Collections;public class ListHome {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(5);
arrayList.add(4);
arrayList.add(3);
arrayList.add(2);
arrayList.add(1);
Collections.sort(arrayList);
for (int i:arrayList) {
System.out.print(i+"\t");
}
}
}
你帖到Eclipse里面看一下吧。
类 String
java.lang.Object
java.lang.String
所有已实现的接口:
Serializable, CharSequence, Comparable<String>
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class CompareTest { public static void main(String args[]) { List<String> arrayList = new ArrayList<String>();
arrayList.add("7adfakfd");
arrayList.add("1dffakfd");
arrayList.add("3adeakfd");
arrayList.add("4adfdkfd");
arrayList.add("adfekfd");
arrayList.add("qdfakfd");
arrayList.add("adfakfd");
System.out.println(arrayList);
Collections.sort(arrayList);
System.out.println(arrayList);
Collections.reverse(arrayList);
System.out.println(arrayList);
List<Integer> arrayList2 = new ArrayList<Integer>();
arrayList2.add(1243634);
arrayList2.add(254);
arrayList2.add(745);
arrayList2.add(4);
arrayList2.add(6795);
arrayList2.add(32454545);
arrayList2.add(654353);
System.out.println(arrayList2);
Collections.sort(arrayList2);
System.out.println(arrayList2);
Collections.reverse(arrayList2);
System.out.println(arrayList2); }}
对字符升序排列,可能用到的API 方法 我已经贴出来了,另外 我还发了一个加分 帖子。 所以,帮我搞出来了的 有200分奖励。
arrayList.add("aa");
arrayList.add("bb");
arrayList.add("cc");举个例子 对这个降序排列
import java.util.Collections;
import java.util.Scanner;public class ListHome { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("vss");
arrayList.add("sad");
arrayList.add("asd");
arrayList.add("das");
arrayList.add("gdss");
Collections.sort(arrayList);
for (String i:arrayList) {
System.out.print(i+"\t");
}
}
}
好像这样就可以了。自己试一下吧
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}
Collections.reverse();
这两个方法结合起来用可以实现降序排序。
Collections.sort(list,new Comparator(){ public int compare(Object o1, Object o2){
return (o1.hashCode()-o2.hashCode());}});
试试吧import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;public class TestSort {
public static void main(String args[]){
ArrayList<Integer> arrayList=new ArrayList<Integer>();
arrayList.add(1);
arrayList.add(12);
arrayList.add(3);
arrayList.add(2);
Collections.sort(arrayList,new MyComparator());
for(int i=0;i<arrayList.size();i++){
System.out.println(arrayList.get(i));
}
}
} class MyComparator implements Comparator{
public MyComparator(){
super();
}
public int compare(Object o1, Object o2) {
return (Integer)o1-(Integer)o2;
}
}
挺有意思吧。
public int compare(Object o1, Object o2) {
return (Integer)o2-(Integer)o1;
}
//省略添加元素的步聚,也就是strs.add();
Comparator<String> strsComparator = new Comparator<String>(){
public int compare(String str1,String str2){
//这里可以根据你想要的方式排序,因为String已经实现了Comparable 原因
//return str1.compareTo(str2); //升序
//return str2.compareTo(str1) //降序
//这里再比如String 是个自定义的类没被Comparable 接口
//示例1 :根据String 的长度升序排序 降序只需要将str1 和 str2 前后调一下就行了
//return str1.length() - str2.length();
//示例2 :根据String 里面的字符升序排序
int end = str1.length() > str2.length() ? str2.length() : str1.length();
for(int i=0; i<end ; i++){
if(str1.charAt(i)-str2.charAt(i)!=0){
return str1.charAt(i)-str2.charAt(i);
}
}
return str1.length() - str2.length();
}
};
Collections.sort(strs,strsComparator);
import java.util.Collections;
import java.util.Comparator;public class ListHome { public static void main(String args[]) {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(4);
Collections.sort(arrayList, new Comparator<Integer>() { public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
} });
System.out.println("正序排列后:\n"+arrayList);
Collections.sort(arrayList, new Comparator<Integer>() { public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
} });
System.out.println("逆序序排列后:\n"+arrayList);
}}
import java.util.*;public class ListHome {
public static void main(String args[])
{
ArrayList<Integer> arrayList=new ArrayList<Integer>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(4);
Collections.sort(arrayList);
}
}不就是这样了吗??貌似楼主不太勇敢啊··
import java.util.Collections;
import java.util.Comparator;public class Test {
public static void main(String[] args) {
ArrayList<String> as=new ArrayList<String>();
as.add("B");
as.add("A");
as.add("C");
as.add("E");
//用这个方法,排完序后就是升序,如果相要降序,那么还要接着调用reverse方法
Collections.sort(as);//升序
System.out.println(as);
//这个方法可以让集合中的元素按相反的顺序重排
Collections.reverse(as);
System.out.println(as);
//这个方法,可以控制是按升序排还是用降序排
Collections.sort(as, new Comparator<String>(){ public int compare(String a, String b) {
return b.compareTo(a);//降序
//return a.compareTo(b);//升序
}
});
System.out.println(as);
}
}冲着你的高分,我来给个全面的解答,把上面的代码贴到eclips里执行试试
Map map = new HashMap();
map.put("traffic", travel.getTraffic());
map.put("content", travel.getContent());
map.put("hotel", travel.getHotel());
map.put("type", travel.getType());
map.put("opid", travel.getOpid());
map.put("upymd", travel.getUpymd());
travels.add(map);
//对加入了新元素的集合按行程日期重新排序
Collections.sort(travels, new Comparator(){
/* (non-Javadoc)
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
public int compare(Object o1, Object o2) {
Object obj = ((Map)o1).get("tdate");
Integer tdate1 = null;
if(obj instanceof BigDecimal) {
BigDecimal bd1 = (BigDecimal) obj;
tdate1= Integer.valueOf(bd1.toString());
}else if(obj instanceof Integer) {
tdate1 = (Integer) obj;
}
tdate1 = tdate1!=null?tdate1:0;
obj = ((Map)o2).get("tdate");
Integer tdate2 = null;
if(obj instanceof BigDecimal) {
BigDecimal bd2 = (BigDecimal) obj;
tdate2= Integer.valueOf(bd2.toString());
}else if(obj instanceof Integer) {
tdate2 = (Integer) obj;
}
tdate2 = tdate2!=null?tdate2:0;
return tdate1-tdate2;
}
});
import java.util.*; public class ListHome {
public static void main(String args[]) {
ArrayList <Integer> arrayList=new ArrayList <Integer>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(4);
Collections.sort(List <Integer> arrayList,new Comparator() {
public int compare(Object o1, Object o2) {
return (Integer)o2-(Integer)o1
}
});
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;public class TestComparator { public static void main(String args[]) { ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(4);
Collections.sort(arrayList, new Comparator<Integer>() { @Override
public int compare(Integer o1, Integer o2) {
// return o1-o2;
return o2 - o1;
} });
System.out.println(arrayList); }}
public class SortTest { List<TestVo> list = new ArrayList<TestVo>();
public SortTest() {
for (int i = 0; i < 10; i++) {
TestVo vo = new TestVo();
vo.setName("name" + i);
vo.setAge(i);
if(i==6){
vo.setAge(5);
}
if(i==7){
vo.setName("name" + 6);
}
list.add(vo);
}
}
public static void main(String[] args) {
SortTest st = new SortTest();
List<TestVo> list = st.list;
System.out.println("字符串升序排序开始.................");
Collections.sort(list, st.new ScoreStrAsc());
for (int i = 0;i< list.size(); i++) {
TestVo vo = list.get(i);
System.out.println("name="+vo.getName()+" age="+vo.getAge());
}
System.out.println("字符串降序排序开始.................");
Collections.sort(list, st.new ScoreStrDesc());
for (int i = 0;i< list.size(); i++) {
TestVo vo = list.get(i);
System.out.println("name="+vo.getName()+" age="+vo.getAge());
}
System.out.println("int 升序排序开始.................");
Collections.sort(list, st.new ScoreIntAsc());
for (int i = 0;i< list.size(); i++) {
TestVo vo = list.get(i);
System.out.println("age="+vo.getAge()+" name="+vo.getName());
}
System.out.println("int 降序排序开始.................");
Collections.sort(list, st.new ScoreIntDesc());
for (int i = 0;i< list.size(); i++) {
TestVo vo = list.get(i);
System.out.println("age="+vo.getAge()+" name="+vo.getName());
}
} class TestVo {
private String name;
private int age ; public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
// 字符串降序排序
class ScoreStrDesc implements Comparator {
public int compare(Object o1, Object o2) {
TestVo creditTemp1 = (TestVo) o1;
TestVo creditTemp2 = (TestVo) o2;
return creditTemp2.getName().compareTo(creditTemp1.getName());
}
}
// 字符串升序排序
class ScoreStrAsc implements Comparator {
public int compare(Object o1, Object o2) {
TestVo creditTemp1 = (TestVo) o1;
TestVo creditTemp2 = (TestVo) o2;
return creditTemp1.getName().compareTo(creditTemp2.getName());
}
}
// int 降序排序
class ScoreIntDesc implements Comparator {
public int compare(Object o1, Object o2) {
TestVo creditTemp1 = (TestVo) o1;
TestVo creditTemp2 = (TestVo) o2;
if (creditTemp2.getAge() == creditTemp1.getAge()) {
return 0;
}
if (creditTemp2.getAge() > creditTemp1.getAge()) {
return 1;
}else{
return -1;
}
}
}
// int 升序排序
class ScoreIntAsc implements Comparator {
public int compare(Object o1, Object o2) {
TestVo creditTemp1 = (TestVo) o1;
TestVo creditTemp2 = (TestVo) o2;
if (creditTemp1.getAge() == creditTemp2.getAge()) {
return 0;
}
if (creditTemp1.getAge() > creditTemp2.getAge()) {
return 1;
}else{
return -1;
}
}
}
}
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2); 我真没弄懂其中o1 和o2 是什么意思,为啥这样就可以排序了呢?
public static void main(String[] args) {
// TODO 自动生成方法存根
ArrayList arrayList = new ArrayList();
arrayList.add(4);
arrayList.add(3);
arrayList.add(2);
arrayList.add("a");
arrayList.add("b");
sort(arrayList);
for (Object i:arrayList) {
System.out.print(i+"\t");
}
}
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}
public static void sort(Object[] a) {
Object[] aux = (Object[])a.clone();
mergeSort(aux, a, 0, a.length, 0);
}
private static void mergeSort(Object[] src,
Object[] dest,
int low,
int high,
int off) {
int length = high - low; // Insertion sort on smallest arrays
if (length < 7) {
for (int i=low; i<high; i++)
for (int j=i; j>low &&
(dest[j-1].toString()).compareTo(dest[j].toString())>0; j--)
swap(dest, j, j-1);
return;
} // Recursively sort halves of dest into src
int destLow = low;
int destHigh = high;
low += off;
high += off;
int mid = (low + high) >> 1;
mergeSort(dest, src, low, mid, -off);
mergeSort(dest, src, mid, high, -off); // If list is already sorted, just copy from src to dest. This is an
// optimization that results in faster sorts for nearly ordered lists.
if ((src[mid-1].toString()).compareTo(src[mid].toString()) <= 0) {
System.arraycopy(src, low, dest, destLow, length);
return;
} // Merge sorted halves (now in src) into dest
for(int i = destLow, p = low, q = mid; i < destHigh; i++) {
if (q >= high || p < mid && (src[p].toString()).compareTo(src[q].toString())<=0)
dest[i] = src[p++];
else
dest[i] = src[q++];
}
}
private static void swap(Object[] x, int a, int b) {
Object t = x[a];
x[a] = x[b];
x[b] = t;
}
}
呵呵,重写了一下Collections类里的sort方法,可以实现了。
public static void main(String[] args) {
// TODO 自动生成方法存根
ArrayList arrayList = new ArrayList();
arrayList.add(4);
arrayList.add(3);
arrayList.add(2);
arrayList.add("a");
arrayList.add("b");
sort(arrayList);
for (Object i:arrayList) {
System.out.print(i+"\t");
}
}
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}
public static void sort(Object[] a) {
Object[] aux = (Object[])a.clone();
mergeSort(aux, a, 0, a.length, 0);
}
private static void mergeSort(Object[] src,
Object[] dest,
int low,
int high,
int off) {
int length = high - low; // Insertion sort on smallest arrays
if (length < 7) {
for (int i=low; i<high; i++)
for (int j=i; j>low &&
(dest[j-1].toString()).compareTo(dest[j].toString())>0; j--)
swap(dest, j, j-1);
return;
} // Recursively sort halves of dest into src
int destLow = low;
int destHigh = high;
low += off;
high += off;
int mid = (low + high) >> 1;
mergeSort(dest, src, low, mid, -off);
mergeSort(dest, src, mid, high, -off); // If list is already sorted, just copy from src to dest. This is an
// optimization that results in faster sorts for nearly ordered lists.
if ((src[mid-1].toString()).compareTo(src[mid].toString()) <= 0) {
System.arraycopy(src, low, dest, destLow, length);
return;
} // Merge sorted halves (now in src) into dest
for(int i = destLow, p = low, q = mid; i < destHigh; i++) {
if (q >= high || p < mid && (src[p].toString()).compareTo(src[q].toString())<=0)
dest[i] = src[p++];
else
dest[i] = src[q++];
}
}
private static void swap(Object[] x, int a, int b) {
Object t = x[a];
x[a] = x[b];
x[b] = t;
}
}
呵呵,重写了一下Collections类里的sort方法,可以实现了。
import java.util.*;
public class SortTest {List<TestVo> list = new ArrayList<TestVo>();
public SortTest() {
for (int i = 0; i < 10; i++) {
TestVo vo = new TestVo();
vo.setName("name" + i);
vo.setAge(i);
if(i==6){
vo.setAge(5);
}
if(i==7){
vo.setName("name" + 6);
}
list.add(vo);
}
}
public static void main(String[] args) {
SortTest st = new SortTest();
List<TestVo> list = st.list;System.out.println("字符串升序排序开始.................");
Collections.sort(list, st.new ScoreStrAsc());
for (int i = 0;i< list.size(); i++) {
TestVo vo = list.get(i);
System.out.println("name="+vo.getName()+" age="+vo.getAge());
}
System.out.println("字符串降序排序开始.................");
Collections.sort(list, st.new ScoreStrDesc());
for (int i = 0;i< list.size(); i++) {
TestVo vo = list.get(i);
System.out.println("name="+vo.getName()+" age="+vo.getAge());
}System.out.println("int 升序排序开始.................");
Collections.sort(list, st.new ScoreIntAsc());
for (int i = 0;i< list.size(); i++) {
TestVo vo = list.get(i);
System.out.println("age="+vo.getAge()+" name="+vo.getName());
}System.out.println("int 降序排序开始.................");
Collections.sort(list, st.new ScoreIntDesc());
for (int i = 0;i< list.size(); i++) {
TestVo vo = list.get(i);
System.out.println("age="+vo.getAge()+" name="+vo.getName());
}}class TestVo {
private String name;
private int age ;public int getAge() {
return age;
}public void setAge(int age) {
this.age = age;
}public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}
}
// 字符串降序排序
class ScoreStrDesc implements Comparator {
public int compare(Object o1, Object o2) {
TestVo creditTemp1 = (TestVo) o1;
TestVo creditTemp2 = (TestVo) o2;
return creditTemp2.getName().compareTo(creditTemp1.getName());
}
}
// 字符串升序排序
class ScoreStrAsc implements Comparator {
public int compare(Object o1, Object o2) {
TestVo creditTemp1 = (TestVo) o1;
TestVo creditTemp2 = (TestVo) o2;
return creditTemp1.getName().compareTo(creditTemp2.getName());
}
}// int 降序排序
class ScoreIntDesc implements Comparator {
public int compare(Object o1, Object o2) {
TestVo creditTemp1 = (TestVo) o1;
TestVo creditTemp2 = (TestVo) o2;
if (creditTemp2.getAge() == creditTemp1.getAge()) {
return 0;
}
if (creditTemp2.getAge() > creditTemp1.getAge()) {
return 1;
}else{
return -1;
}
}
}
// int 升序排序
class ScoreIntAsc implements Comparator {
public int compare(Object o1, Object o2) {
TestVo creditTemp1 = (TestVo) o1;
TestVo creditTemp2 = (TestVo) o2;
if (creditTemp1.getAge() == creditTemp2.getAge()) {
return 0;
}
if (creditTemp1.getAge() > creditTemp2.getAge()) {
return 1;
}else{
return -1;
}
}
}
}
api里的ArrayList.sort()会自动调用那个equals方法