【问题标题】:How to do sorting in array list without using collections in Java如何在不使用 Java 中的集合的情况下在数组列表中进行排序
【发布时间】:2015-07-13 07:17:32
【问题描述】:
ArrayList < Integer > arraylist = new ArrayList < Integer > ();

arraylist.add(10010);
arraylist.add(5);
arraylist.add(4);
arraylist.add(2);

for (int i = 0; i < arraylist.size(); i++) {

    for (int j = arraylist.size() - 1; j > i; j--) {
        if (arraylist.get(i) > arraylist.get(j)) {

            int tmp = arraylist.get(i);
            arraylist.get(i) = arraylist.get(i);
            arraylist.get(j) = tmp;

        }

    }

}
for (int i: arraylist) {
    System.out.println(i);
}

交换时出错,LHS 应该是可变的。我明白了。 Set 方法在这里有效,但我不想使用。 有没有办法在不使用 set 方法的情况下做到这一点? 非常感谢您的帮助。

【问题讨论】:

  • 请问您为什么不想使用 set 方法? Java 主要是关于 setter 和 getter。
  • 感谢ouzture的回复,其实这个问题是在面试中问的,面试官问不需要使用sort,set或任何其他内置函数。:)

标签: java sorting arraylist


【解决方案1】:
arraylist.get(i)= arraylist.get(i);
arraylist.get(j) =tmp;

您不能为方法调用赋值。正如编译器告诉你的,赋值的左边必须是一个变量。

使用set方法:

arraylist.set(i,arraylist.get(j));
arraylist.set(j,tmp);

有没有不使用set方法的方法?

没有。除非您希望将 ArrayList 转换为数组,否则请对数组进行排序,然后使用排序后的数组更新 ArrayList。

【讨论】:

  • 仅供参考:您可以使用反射来获取 arraylist 的内容数组,然后手动分配值。但是 set 方法如果绝对是首选。
  • 谢谢 Eran,我想听听确切的答案。
【解决方案2】:
  Integer[] list={3,5,100,8,17,19};

   for(int i=0;i<list.length;i++){

       for(int j=i+1;j<list.length;j++){

           Integer tempI=list[i];
           Integer tempJ=list[j];

           if(tempI>tempJ){
             list[i]=tempJ;
             list[j]= tempI;

           }

           }
       }

   for(Integer a:list){
       System.out.println(""+a);
   }

【讨论】:

    【解决方案3】:

    您不能直接为 ArrayList 索引赋值。您必须使用 set() 方法。 更改您的代码如下:

      ArrayList < Integer > arraylist = new ArrayList < Integer > ();
    
          arraylist.add(10010);
          arraylist.add(5);
          arraylist.add(4);
          arraylist.add(2);
    
          for (int i = 0; i < arraylist.size(); i++) {
    
              for (int j = arraylist.size() - 1; j > i; j--) {
                  if (arraylist.get(i) > arraylist.get(j)) {
    
                      int tmp = arraylist.get(i);
                      arraylist.set(i,arraylist.get(j)) ;
                      arraylist.set(j,tmp);
    
                  }
    
              }
    
          }
          for (int i: arraylist) {
              System.out.println(i);
          }
    

    【讨论】:

      【解决方案4】:

      交换到列表值的最短方法如下:

      arraylist.set(i, arraylist.set(j, arraylist.get(i)));
      

      您可以利用set 方法返回前一个值的事实。该算法是在Collections.swap标准方法中实现的,所以你可以使用它:

      Collections.swap(arraylist, i, j);
      

      【讨论】:

        【解决方案5】:

        交换问题:

                    int tmp = arraylist.get(i);
                      arraylist.set(i,arraylist.get(j)) ;
                      arraylist.set(j,tmp);
        

        【讨论】:

          【解决方案6】:
          import java.util.ArrayList;
          import java.util.Scanner;
          
          class Main{
          
              public static String titleCase(String s){
                  String is = s;
                  String ret = "";
          
          
                          ret += is.substring(0, 1).toUpperCase();
          
                          ret += is.substring(1).toLowerCase();
          
          
          
          
                    return ret;
                  }
          
              public static ArrayList<String> sort(ArrayList<String> list){
                  for(int z = 0; z <list.size()-1; z++){
                      if(list.get(z).compareTo(list.get(z+1)) >0){
                          list.add(z, list.get(z+1));
                          list.remove(z+2);
                      }
                  }
                  return list;
          
              }
          
          
              public static void main(String[] args) {
          
          
                  Scanner scan = new Scanner (System.in);
          
                  ArrayList<String> names = new ArrayList();
                  int x = 0;
                  int count = 0;
                  String output = "";
          
                  while(x != 1){
                  System.out.println("Enter the next name:");
                  String temp = scan.next();
                  temp = titleCase(temp);
          
          
                  if(temp.toLowerCase().equals("stop")){
                      x = 1;
                  }
                  else{
          
                      names.add(count, temp);
                      count++;
                  }
          
                  }
                names.equals(sort(names));
                  System.out.println(names.toString());
          
          
          
              }
          
          
          }
          

          【讨论】:

          • 欢迎来到 Stack Overflow!虽然此代码可能会回答问题,但提供有关 为什么 和/或 如何 此代码回答问题的附加上下文会提高其长期价值。
          【解决方案7】:
          `import java.util.ArrayList;
          import java.util.Collections;
          
          public class SortList {
              public static void main(String[] args){
                  ArrayList<Integer> listToSort = new ArrayList<Integer>();
                  listToSort.add(10010);
                  listToSort.add(5);
                  listToSort.add(4);
                  listToSort.add(2);
                  System.out.println("List to SOrt"+listToSort);
                  for(int i= 0;i<listToSort.size();i++)
                  {
                      for (int j=0;j<listToSort.size();j++){
                          if(listToSort.get(j)>listToSort.get(i)){
                              int temp=listToSort.get(i);
                              int temp2=listToSort.get(j);
                              listToSort.set(j,temp);
                              listToSort.set(i,temp2);
                          }
                      }
                  }
                  System.out.println("List SOrted"+listToSort);
              }
          }
          

          【讨论】:

            【解决方案8】:

            试试这个:

            public static void SortingArrayListAsc(List<Integer> list) {
            
                for (int i = 0; i < list.size(); i++) {
            
                    for (int j = 0; j < list.size(); j++) {
            
                        if (list.get(i) < list.get(j)) {
            
                            Integer temp = list.get(i);
            
                            list.set(i, list.get(j));
            
                            list.set(j, temp);
            
                        }
            
                    }
            
                }       
            
            }
            

            【讨论】:

              【解决方案9】:
              public class SortUsingCollection{
              
              
              public static void main(String[] args){
              
              
              
              ArrayList al=new ArrayList();
              
              al.add(32);
              al.add(3);
              al.add(23);
              al.add(80);
              al.add(38);
              al.add(31);
              al.add(90);
              al.add(8);
              
              ListIterator i=al.listIterator();
              
              int k=0;
              
              while(i.hasNext()){
              int loop=0;
              Integer n=(Integer)i.next();
              ListIterator j=al.listIterator();
              while(loop<k){
              if(j.hasNext())
              j.next();
              loop++;
              }
              
              
              
              
              while(j.hasNext()){
              
              
              Integer m=(Integer)j.next();
              
              
              if(m<n){
              
              
              j.set(n);
              
              
              i.set(m);
              
              
              n=m;
              
              
              }
              
              
              }
              
              
              
              k++;
              
              }
              
              
              System.out.println(al);
              
              
              }
              
              }
              

              【讨论】:

              • 尝试使用正确的语法缩进并记录您的代码。此代码不可读(人类):-)
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-06-25
              • 1970-01-01
              • 1970-01-01
              • 2016-01-23
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多