2016-02-16 2 views
1

Как мой вопрос описывает, как отсортировать список массива типов в java?Как отсортировать список типов массивов в java?

Это мой ListClass

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 и т. Д.), Создаваемые с помощью программы драйвера.

+0

Большинство элементов, которые являются сортируемыми орудия '' Сопоставимые , вы можете бросить вещи к этому классу и называют 'compareTo' – Ferrybig

+1

Возможные дубликат [Как отсортировать список определяемых пользователем типов в Java?] (HTTP: //stackoverflow.com/questions/18407784/how-to-sort-list-of-user-defined-type-in-java) – Guy

+2

Возможный дубликат [Как отсортировать список родовых типов в Java] (http://stackoverflow.com/questions/14577910/how-to-sort-a-list-of-generic-types-in-java) ... пожалуйста, найдите SO перед публикацией. –

ответ

1

Добавить метод сортировки в класс

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

И изменить class ListClass<T> к class ListClass<T extends Comparable<T>>.

Если вы хотите отсортировать данные по конкретному компаратору, добавьте метод ниже.

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

Спасибо! Это сработало для меня! –

0

Вам необходимо определить метод сравнения для элементов списка. Обычно это делается путем элементы реализации интерфейса, как Comparable: public class ListClass<T extends Comparble<T>>

+0

Я реализовал его как интерфейс. Но я не могу понять, как написать метод CompareTo для общего типа, то .. Eclipse, уже создан этот \t '@Override \t общественного ИНТ CompareTo (Т о) { \t \t // TODO Auto-генерироваться метод заглушкой \t \t return 0; 'но как он будет сортировать элементы любого типа? –

+0

Вам необходимо реализовать его для любого типа, который вы хотите отсортировать. Для большинства типов нет естественного порядка сортировки, даже для строк, порядок сортировки сильно зависит от языка. –

Смежные вопросы