【问题标题】:How to sort list of array type in java?如何在java中对数组类型列表进行排序?
【发布时间】:2016-02-16 08:30:31
【问题描述】:

正如我的问题所描述的,如何在 java 中对类型数组列表进行排序?

这是我的列表类

package AlgorithmAndDataStructures;
public class ListClass<T>{
    private static final int MAX_SIZE_OF_LIST = 100;
    /**
     * This class is having definitions for:-
     * Generic List Class Variables
     * Constructor for Creating Class Objects
     * Method: Adding a Element to the End of List
     * Method: Adding a Element at anywhere/ particular place
     * Method: Checking List is full or not.
     * Method: Checking List is Empty or Not.
     * Method: Displaying All Elements of List
     * Method: Making New Space for new element addition.
     * Method: Sorting a List
     */

    // Declaring Array and Variables
    private T[] listArray;
    private int totalElements;

    // Constructor For ListClass
    @SuppressWarnings("unchecked")
    public ListClass(int listSize) { // entered by the user on runtime
        totalElements = 0;
        listArray = (T[]) new Object[listSize];
    }

    // Method For Adding an Element
    public boolean addElement(T newElement)
    {
        boolean isElementAdded = true;
        if(!isListFull()) {
            listArray[totalElements] = newElement;
            totalElements++;
        }
        else
            System.out.println("Sorry, the list is full so, new element can not      be added.");
            isElementAdded = false;
        return isElementAdded;
    }

    // length = totalElements
    // Method for Adding/Inserting Element in any Particular Place
    public boolean addSpecific(int newLocation, T newElement) {
        boolean elementAdded = true;
        if (!isListFull() && (newLocation >= 1) && (newLocation <= totalElements +1) )
        {
            newSpace(newLocation);
            listArray[newLocation -1] = newElement;
            totalElements++;
            }
        else {
            elementAdded = false;
        }
        return elementAdded;
    }

    // Method for Displaying The List Elements
        public void displayListElement() {
            if(isListEmpty())
            {
                System.out.println("Sorry, there is no element in the List!");
            }
            else 
            {
            for(int elements = 0; elements < totalElements; elements++  ) {
                System.out.println((listArray[elements]));
            }
            System.out.println("All elements has been displayed!");

            }
        }

    // Method for Checking if List is Empty or Number of elements = 0
    public boolean isListEmpty() {
        return totalElements == 0;
    }
    // Method for Checking is List is full or not. 
    public boolean isListFull() 
    {
        return totalElements == MAX_SIZE_OF_LIST;
    }

    private void newSpace( int newLocation)
    {
        // assert is a method predefined; indicator for index number
    assert (newLocation >=1) && (newLocation <= totalElements +1);
    int newIndicator = newLocation -1;
    int lastIndicator = totalElements -1;
    /**
     * For Shifting Elements to Next Indexes
     */
    for ( int sign = lastIndicator; sign >= newIndicator; sign--)
    listArray[sign +1] = listArray[sign];
    }


}

这是我的 DriverProgram

package AlgorithmAndDataStructures;

public class DriverListClass {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ListClass<Integer> listObjectInt = new ListClass<Integer>(10);
        listObjectInt.addElement(12);
        listObjectInt.addElement(17);
        listObjectInt.addElement(90);
        listObjectInt.addElement(53);
        listObjectInt.addSpecific(3, 56);
        listObjectInt.displayListElement();


        // String List
        ListClass<String> listObjectStr = new ListClass<String>(4);
        listObjectStr.addElement("Suman");
        listObjectStr.addElement("Armaan");
        listObjectStr.addElement("Atif");
        listObjectStr.addElement("Tauseef");
        listObjectStr.displayListElement();
    }

}

现在,我希望在 ListClass 中有一个通用的排序方法,它可以对通过驱动程序生成的任何类型(String、Integer、Double、Float 等)的列表进行排序。

【问题讨论】:

  • 大多数可排序的元素都实现了Comparable&lt;T&gt;,您可以将内容转换为该类并调用compareTo
  • How to sort a list of generic types in Java 的可能重复项......请在发布前搜索 SO。
  • 好吧,我已经在 ListClass 中实现了 Comparable,但是我该如何为我的案例实际编写 compareTo 方法。我无法理解您给我的链接,因为它是针对特定字符串类型的。
  • 根据对象a和b的顺序,如果ab返回1。

标签: java arrays list sorting


【解决方案1】:

为你的类添加排序方法

public void sort() {
    Arrays.sort(listArray, 0, totalElements);
}

并将class ListClass&lt;T&gt; 更改为class ListClass&lt;T extends Comparable&lt;T&gt;&gt;

如果要按特定的 Comparator 排序,请在下面添加方法。

public void sort(Comparator<T> comparator) {
    Arrays.sort(listArray, 0, totalElements, comparator);
}

【讨论】:

    【解决方案2】:

    您需要为列表的元素定义比较方法。这通常通过使元素实现类似Comparable 的接口来完成: public class ListClass&lt;T extends Comparble&lt;T&gt;&gt;

    【讨论】:

    • 我已经将它实现为一个接口。但是,我无法理解如何为泛型类型编写 compareTo 方法。Eclipse 已经创建了这个@Override public int compareTo(T o) { // TODO Auto-generated method stub return 0;,但是它将如何对任何类型的元素进行排序?
    • 你需要为你想要排序的任何类型实现它。大多数类型没有自然的排序顺序,即使是字符串,排序顺序很大程度上取决于语言。
    猜你喜欢
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2019-06-09
    • 1970-01-01
    • 2013-08-26
    • 2020-02-23
    相关资源
    最近更新 更多