现在的位置: 首页 > 综合 > 正文

java ArrayList的排序

2018年12月12日 ⁄ 综合 ⁄ 共 2405字 ⁄ 字号 评论关闭
class term {
	String str;
	int id; 
	public term(String str, int id) {
		this.str = str;
		this.id = id;
	}
	public String toString() {
		return str+" "+id;
	}
}

class sterm implements Comparable{
	String str;
	int id;
	public sterm(String str, int id) {
		this.str = str;
		this.id = id;
	}
	public int compareTo(Object o) {
		return ((sterm)o).id - id;
	}
	public String toString() {
		return str+" "+id;
	}
}

//method1: explicit implements Comparator
class termComparator implements Comparator {
	public int compare (Object o1, Object o2) {
		return ((term)o1).id - ((term)o2).id;
	}
}

public class t1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		ArrayList<Integer> arr = new ArrayList<Integer>( Arrays.asList(3,1,3,7,8,0));
//		
//		Collections.sort(arr, new Comparator(){
//			
//			public int compare(Object o1, Object o2){
//				return new Double((Integer)o1).compareTo(new Double ((Integer)o2));
//			}
//		});
		//method1
		List<term> ls = new ArrayList<term>();
		ls.add(new term("a",1));
		ls.add(new term("b",5));
		ls.add(new term("c",2));
		ls.add(new term("d",2));
		ls.add(new term("e",3));
		ls.add(new term("f",0));
		
		Collections.sort(ls, new termComparator());
		System.out.println(ls);//[f 0, a 1, c 2, d 2, e 3, b 5]
		
		//method2: anonymous implements
		Collections.sort(ls, new Comparator(){
			public int compare(Object o1, Object o2){
				return ((term)o2).id - ((term)o1).id;
			}
		});
		System.out.println(ls);//[b 5, e 3, c 2, d 2, a 1, f 0]
		
		//method3:instantiate a Comparator template
		Comparator<term> termCmp = new Comparator<term>() {
			public int compare(term t1, term t2) {
				return t1.id - t2.id;
			}
		};
		Collections.sort(ls, termCmp);
		System.out.println(ls);//[f 0, a 1, c 2, d 2, e 3, b 5]
		
		//method4:element implements Comparable
		
		List<sterm> lss = new ArrayList<sterm>();
		lss.add(new sterm("a",1));
		lss.add(new sterm("b",5));
		lss.add(new sterm("c",2));
		lss.add(new sterm("d",2));
		lss.add(new sterm("e",3));
		lss.add(new sterm("f",0));
		Collections.sort(lss);
		System.out.println(lss);//[b 5, e 3, c 2, d 2, a 1, f 0]
	}



}

PrioriyQueue的用法和上述的排序类似,有三种方法:

class WordFreq implements Comparable{
		public String wd;
		public int freq;
		public WordFreq(String wd, int freq) {
			this.wd = wd;
			this.freq = freq;
		}
		
		public int compareTo(Object o) {
			return ((WordFreq)o).freq - freq;
		}
		public String toString() {
			return wd+" "+freq;
		}
	}
	
public class testt {

	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PriorityQueue<WordFreq> pq = new PriorityQueue<WordFreq>();
		pq.offer(new WordFreq("aaa", 3));
		pq.offer(new WordFreq("bbb", 4));
		pq.offer(new WordFreq("ccc",1));
		
		
		
		while(pq.peek() != null) {
			System.out.println(pq.poll());
		}//从大到小输出
		
		
		
	}

}

注意,

for (WordFreq wf : pq) {
System.out.println(wf);
}

并不保证遍历的有序

如果List<String> ls 进行排序的话,不需要写Comparator, 因为String本身有compareTo的实现

抱歉!评论已关闭.