很多时候我们都需要对问题结果进行策略性整理方可符合要求;常见排行,有序等等。
这边有个问题是试图从一堆数据中找到符合条件的前后 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; } } } }
时间: 2024-11-08 18:19:55