很多时候我们都需要对问题结果进行策略性整理方可符合要求;常见排行,有序等等。
这边有个问题是试图从一堆数据中找到符合条件的前后 10 个数据, 条件是与指定的值接近的前后 10 个。设想吧
如果这一堆数据是有序的就好了。
如果上面的满足了, 能直接取道我自己元素的位置就好了。这样的话。 index++ 和 index-- 分别取 10 次就 ok 了。
于是,决定用 NavigableSet<E> 结构。 获取符合条件的区间, 分别执行 higher(E), lower(E) 即可。
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.NavigableSet;
import java.util.TreeSet;
import org.apache.commons.lang.ArrayUtils;
public class SortedSetTest {
public static void main(String[] args) {
NavigableSet<Temp> lifePriceTeamSet = new TreeSet<Temp>();
lifePriceTeamSet.add(new Temp(3, "a"));
lifePriceTeamSet.add(new Temp(1, "b"));
lifePriceTeamSet.add(new Temp(5, "c"));
lifePriceTeamSet.add(new Temp(4, "d"));
lifePriceTeamSet.add(new Temp(9, "c"));
lifePriceTeamSet.add(new Temp(2, "d"));
Temp temp = lifePriceTeamSet.higher(new Temp(6, "g"));
...
System.out.println();
temp = lifePriceTeamSet.lower(new Temp(6, "g"));
...
}
static class Temp implements Comparable<Temp> {
private int id;
private String name;
public Temp(int id, String name){
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Temp [id=" + id + ", name=" + name + "]";
}
@Override
public int compareTo(Temp o) {
if (this.getId() > o.getId())
{
return -1;
}
else if (this.getId() == o.getId())
{
return 0;
}
else
{
return 1;
}
}
}
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。