如何将值存储在最佳Java集合结构中

时间:2018-11-13 12:36:48

标签: java collections

哪种类型的集合结构最适合以下结构? 我想创建一行开始和结束位置,并希望将其存储为结构。基于我想执行功能的次数。

示例

StartPosition Endposition 
1                5
6                9
10               14
15               18

现在我想存储((1,5),(6,9),(10,14),(15,18))之类的值 现在我要执行4次函数,因为我有4次出现

for (i=1 , i <4 , i ++)
{
f(xyz , Startposition , endposition)
}

4 个答案:

答案 0 :(得分:1)

我建议您使用创建一个简单的类和该类的List <>。

public class Range{

private int start;
private int end;

// constructor
// gets and setts
}

您将这样使用:

List<Range> ranges = new ArrayList<>();
ranges.add(new Range(1,5));
ranges.add(new Range(6,9));
...
ranges.add(new Range(x,y));


for(Range range : ranges){
    f(xyz, range.getStart(), range.getEnd());
}

答案 1 :(得分:0)

据我了解,二维数组可以做到。您有什么理由要在这里收藏吗?

答案 2 :(得分:-1)

选项1:使用Array。这很简单。

int[] arr = { 1, 5, 6, 9, 10, 14, 15, 18 };

for (int i = 0; i < arr.length; i += 2) {
    int start = arr[i];
    int end = arr[i + 1];
    // payload
}

选项2:与自定义比较器一起使用TreeSet。有点困难,但是代码更清晰。

Set<Pair<Integer, Integer>> ranges = new TreeSet<>(Comparator.comparingInt((ToIntFunction<Pair<Integer, Integer>>)Pair::getKey).thenComparingInt(Pair::getValue));
ranges.add(new Pair<>(1, 5));
ranges.add(new Pair<>(6, 9));
ranges.add(new Pair<>(10, 14));
ranges.add(new Pair<>(15, 18));

for (Pair<Integer, Integer> range : ranges) {
    int start = range.getKey();
    int end = range.getValue();
    // payload
}

答案 3 :(得分:-1)

您可以使用内置的java.awt.Point类来设置X,Y值。将这些对象存储在java.util.ArrayListjava.util.LinkedList