Java 寻找排序不同类型对象的算法
我有两种不同类型的对象,它们都有一个保持优先级的整数。在另一个类中,我想根据优先级顺序遍历每个对象,优先级较高的对象优先于优先级较低的对象 现在我的问题是对象有两种不同的类型。这使得我很难对它们进行分类 循环的类有两个Java 寻找排序不同类型对象的算法,java,algorithm,Java,Algorithm,我有两种不同类型的对象,它们都有一个保持优先级的整数。在另一个类中,我想根据优先级顺序遍历每个对象,优先级较高的对象优先于优先级较低的对象 现在我的问题是对象有两种不同的类型。这使得我很难对它们进行分类 循环的类有两个数组列表,一个保存一种类型的对象,另一个保存另一种类型的对象 以下是我到目前为止的想法: 创建一个布尔值的ArrayList,以及两个整数的ArrayList 循环遍历第一个对象类型的列表,将真布尔值添加到布尔值列表,将对象列表中的索引添加到整数列表,并将优先级添加到第二个整数列表
数组列表
,一个保存一种类型的对象,另一个保存另一种类型的对象
以下是我到目前为止的想法:
ArrayList
,以及两个整数的ArrayList
ArrayList
,并进行排序,以使更高的数字排在第一位。同时,我还将按照排序优先级列表的相同方式对其他两个列表进行排序这会起作用,但它很难看,必须有一个更快的方法来做到这一点,或者至少是一个更简单的方法。或者做我计划的事,但效率更高。我愿意接受完全不同的算法或对我描述的算法进行调整的想法。
集合。sort()
将帮助您比较不同类型对象的值,每个集合实现java.util。Comparator
将是一个很好的选择!但是,一定要确保所有集合(在您的案例中是ArrayList)都可以使用自定义的compare()
实现对它们进行比较,正如Elliott Frisch
所暗示的那样 Collections.sort()
将帮助您比较不同类型对象的值,每个集合实现java.util.Comparator
将是一个很好的选择!但是,一定要确保所有集合(在您的案例中是ArrayList)都可以使用自定义的compare()
实现对它们进行比较,正如Elliott Frisch
所暗示的那样 如果可以更改拥有集合的两个不同对象的定义,则可以创建一个定义“优先级”整数的接口,并让两个对象都实现该接口。完成此操作后,您可能应该将它们全部放入一个按“优先级”值排序的有序集合中。如果您可以更改拥有集合的两个不同对象的定义,您可以创建一个定义“优先级”整数的接口,并让两个对象实现该接口。完成此操作后,您可能应该将它们全部放入按“优先级”值排序的单个有序集合中。如果这两种类型的对象属于具有公共超类的类,则可以将它们存储在该超类的单个集合中,并对该集合进行排序
如果没有,您仍然可以定义两个类都实现的接口,例如Priorityable
(因为它们都具有优先级)。然后可以将它们存储在该接口的集合中,并按优先级对集合进行排序
如果两种类型的对象必须保留在单独的列表中,请根据优先级分别对每个列表进行排序。然后定义一个迭代器,按顺序遍历这些列表。它是通过将两个索引(每个列表一个)设置为零来初始化的。
next()
方法将比较两个列表中下一个对象的优先级,以确定下一个应该返回的对象 如果这两种类型的对象属于具有公共超类的类,则可以将它们存储在该超类的单个集合中,并对该集合进行排序
如果没有,您仍然可以定义两个类都实现的接口,例如Priorityable
(因为它们都具有优先级)。然后可以将它们存储在该接口的集合中,并按优先级对集合进行排序
如果两种类型的对象必须保留在单独的列表中,请根据优先级分别对每个列表进行排序。然后定义一个迭代器,按顺序遍历这些列表。它是通过将两个索引(每个列表一个)设置为零来初始化的。
next()
方法将比较两个列表中下一个对象的优先级,以确定下一个应该返回的对象 不要有两个列表,而是使用一个列表来关联对象中的每个键(优先级)和值(索引)
public class Set extends Comparable<Set>{
public Integer key;
public Integer value;
public Set(Integer key, Integer value){
this.key = key;
this.value = value;
}
public int compareTo(Set s){
return key.compareTo(s.key)
}
}
公共类集扩展了{
公开整数密钥;
公共整数值;
公共集(整型键、整数值){
this.key=key;
这个值=值;
}
公共整数比较(集合s){
返回键。比较(s键)
}
}
由于这些集合对象与其他集合对象具有可比性,您只需将它们全部添加到单个ArrayList中,然后调用该列表上的collections.sort()
或者您可以查看优先级队列。
尽管这可能是对你的简单案例的过度思考。而不是hav
public interface Priorizable
{
int getPriority();
}
public class PriorityComparator implement Comparator<Priorizable>
{
public int compare(final Priorizable p1, final Priorizable p2)
{
return Integer.compare(p1.getPriority(), p2.getPriority())
}
}
Collections.sort(listOfPriorizable, new PriorityComparator());