通过TreeSet实现一个可以保存可重复且有序元素的集合

/**
* @author :肖佳嘉
* @Date:2019-04-05
*/
package com.Gaga.assignment_2;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.TreeSet;

public class Case8_pratise  {

	public static void main(String[] args) {
		/**
		 * 需求:用一个集合保存排序且可以重复的元素/
		 * 1、创建TreeSet集合
		 * 2、将list集合中的所有文件移动到TreeSet集合中去
		 * 3、清空List集合
		 * 4、将TreeSet集合中排好序的元素添加到list集合中
		 */	
		//1、创建List集合
		ArrayList<String> al = new ArrayList<>();
		al.add("aaaa");
		al.add("awaww");
		al.add("apppp");
		al.add("qweqweqweqwe");
		al.add("bbb");
		al.add("fff");
		
		//2、创建一个比较器sore
		sore(al);
		//3、打印集合
		System.out.println(al);
		
	}

	public static void sore(ArrayList<String> L) {
		//创建一个TreeSet对象
		TreeSet<String> tt3 = new TreeSet<>(new Comparator<String>() { 
			//避免类名的泛滥,这里使用更为简洁的匿名内部类。
			@Override
			public int compare(String s1, String s2) {
				int num = s1.compareTo(s2);
				return num == 0 ? 1 : num;
			}
		});							
		//将List集合中添加到TreeSet集合中去自动排序
		tt3.addAll(L);
		//清空List集合中的元素
		L.clear();
		//将排好序的TreeSet集合中的元素添加回List集合中去
		L.addAll(tt3);
		
	}


	

}

发布了61 篇原创文章 · 获赞 18 · 访问量 9545
展开阅读全文

treeSet 一个很诡异的重复性判断问题

03-11

有一个需求是这样的,要求去掉重复Id的文章,如果id相同就去掉,如果不同就按文章发表时间排序,但写完代码发现,id相同的文章怎么也去重不了: [code="java"] public class ArticleSource implements Comparable<ArticleSource> { private long id; private int sourceId; private long time; public ArticleSource(long id,int sourceId,long time) { this.id = id; this.sourceId = sourceId; this.time = time;; } public long getId() { return id; } public void setId(long id) { this.id = id; } public int getSourceId() { return sourceId; } public void setSourceId(int sourceId) { this.sourceId = sourceId; } public long getTime() { return time; } public void setTime(long time) { this.time = time; } @Override public boolean equals(Object obj) { System.out.println("equals"); if(obj instanceof ArticleSource) { ArticleSource at = (ArticleSource)obj; if(at.getId() == this.getId()) { return true; } } return false; } @Override public int hashCode() { System.out.println("hash"); return (int) id; } @Override public int compareTo(ArticleSource o) { if(o == null) { return 0; } System.out.println(o.getId() + "=>"+this.getId() ); if(o.getId() == this.getId()) { return 0; } if(o.getTime() >this.getTime()) { return -1; }else if(o.getTime()==this.getTime()){ return 0; }else { return 1; } } @Override public String toString() { return id +":" + time; } public static void main(String[] args) { Set<ArticleSource> set = new TreeSet<ArticleSource>(); set.add(new ArticleSource(391454L, 1420, 13626506898983L)); set.add(new ArticleSource(3914064L, 1420, 10000L)); set.add(new ArticleSource(3914065L, 4235, 1362650633576L)); set.add(new ArticleSource(3914064L, 4235, 1363333333333L)); System.out.println(set); } [/code] 结果: [code="java"] 391454=>3914064 391454=>3914065 3914064=>3914065 3914065=>3914064 391454=>3914064 [3914064:10000, 3914065:1362650633576, 3914064:1363333333333, 391454:13626506898983] [/code] 诡异的是,第二个和第四个id是相同的,竟然无法去重,更诡异的是,把第四个的time 少一位,就是136333333333L,又可以去掉重复,请教一下,是什么原因?难道long不允许超过13位吗 结果: [code="java"] 391454=>3914064 391454=>3914065 3914064=>3914065 3914065=>3914064 3914064=>3914064 [3914064:10000, 3914065:1362650633576, 391454:13626506898983] [/code] 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览