我在链接列表中排序String时遇到问题,我可以很容易地将数字相互比较并使它们按升序或降序排列。
public class Node
{
private Shape shape;
private Node nextNode;
private Node PreviousNode;
private boolean front = false;
Node()
{
this.shape = null;
this.nextNode = null;
this.previousNode = null;
}
public Node(Shape shape, Node active)
{
this.shape = shape;
this.nextNode = null;
this.previousNode = null;
}
public Node addNode(Shape shape)
getShape()
setShape(Shape shape)
getNextNode()
setNextNode(Node nextNode)
getPreviousNode()
setPreviousNode(Node previousNode)
public boolean front()
public void setFront(boolean front)
}
顺序应该是这样的(方形,矩形,圆形,椭圆形,直线)
public class linkedlist
{
Node front
Node end
public linkedlist()
{
this.setFront(null);
this.end = null;
}
public void addFront(Shape shape)
public void addNewNode(Shape shape)
public boolean AscendingOrder(Node current)
{
Node compareNextNode = current.getNextNode();
while(!compareNextNode.equals(null))
{
if(current.getShape().TypeOfShape == "SQUARE")
{
Node PreviousCurrent = current.getNextNode();
然后我不知道如何构建算法来对形状的其余部分进行排序 如果有人有任何可以帮助我的好参考,我会很高兴
答案 0 :(得分:1)
我建议这样做:
Shape
班级实施Comparable<Shape>
。final static String[] shapeOrder;
数组,用于定义形状的顺序。compareTo
方法:首先根据shapeOrder
数组和TypeOfShape
获取当前形状的索引。获取当前对象和要比较的对象的索引后,比较索引,较小的索引将是 minor ,较大的索引将是 major (此行为将取决于您的使用情况。)current.getShape().compareTo(otherNode.getShape())
,并使用返回的值(小于0,0,大于0)进行排序。如果要同时执行升序和降序,请创建两个实现Comparator<Shape>
的类,使用与上述类似的比较逻辑。
答案 1 :(得分:1)
一种解决方案是为您的形状类型创建enum
,如下所示:
enum ShapeType {
SQUARE,
RECTANGLE,
CIRCLE,
OVAL,
LINE
}
然后将Shape.TypeOfShape
声明为ShapeType
类型,而不是String
。枚举的元素具有可比性,例如:
if (ShapeType.SQUARE.compareTo (ShapeType.CIRCLE) < 0)
会评估为真。所以你可以这样比较两个形状节点:
if (current.getShape().TypeOfShape.compareTo (compareNextNode.getShape().TypeOfShape) < 0)
查看当前形状是否“小于”compareNextNode
的形状。