Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不使用集合的情况下按字母顺序对arraylist进行排序。sort();_Java_Sorting - Fatal编程技术网

Java 如何在不使用集合的情况下按字母顺序对arraylist进行排序。sort();

Java 如何在不使用集合的情况下按字母顺序对arraylist进行排序。sort();,java,sorting,Java,Sorting,我有下面的代码,我在main方法中按字母顺序对数组列表进行排序,用户输入他的字符串。 这是我的密码: import java.util.Scanner; import java.util.ArrayList; class Main{ public static void main(String[] args) { ArrayList<String> names = new ArrayList<String>(); Scanner scan = new

我有下面的代码,我在main方法中按字母顺序对数组列表进行排序,用户输入他的字符串。 这是我的密码:

import java.util.Scanner;
import java.util.ArrayList;

class Main{
  public static void main(String[] args) {
    ArrayList<String> names = new ArrayList<String>();
    Scanner scan = new Scanner(System.in);
    String name;
    do{
      System.out.println("Enter the next name: ");
      name = scan.nextLine();
      String toUpperCase = titleCase(name);
      if(!toUpperCase.equals("Stop")){
        names.add(toUpperCase);
      }
    } while(!name.equalsIgnoreCase("STOP"));

    System.out.println(names.toString());


  }
  public static String titleCase(String s){
    String output = s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
    return output;
  }
}
import java.util.Scanner;
导入java.util.ArrayList;
班长{
公共静态void main(字符串[]args){
ArrayList name=新的ArrayList();
扫描仪扫描=新扫描仪(System.in);
字符串名;
做{
System.out.println(“输入下一个名称:”);
name=scan.nextLine();
String toUpperCase=标题酶(名称);
如果(!toUpperCase.equals(“停止”)){
name.add(toUpperCase);
}
}而(!name.equalsIgnoreCase(“STOP”);
System.out.println(names.toString());
}
公共静态字符串标题库(字符串s){
字符串输出=s.substring(0,1).toUpperCase()+s.substring(1).toLowerCase();
返回输出;
}
}
请不要给出任何笼统的答案,我已经为此挣扎了一段时间。如果你觉得答案很简单,那可能不是我的答案。

替换这一行:

names.add(toUpperCase);
为此:

int index = names.size();
for (int i = 0; i < names.size(); i++) {
    if (names.get(i).compareTo(toUpperCase) > 0) {
        index = i;
        break;
    }
}
names.add(index, toUpperCase);
int index=names.size();
对于(int i=0;i0){
指数=i;
打破
}
}
name.add(索引,toUpperCase);
所以,每当您从用户那个里得到新字符串时,您都会将它插入数组列表的正确位置

此方法速度非常慢,但对于家庭作业来说可以

替换此行:

names.add(toUpperCase);
为此:

int index = names.size();
for (int i = 0; i < names.size(); i++) {
    if (names.get(i).compareTo(toUpperCase) > 0) {
        index = i;
        break;
    }
}
names.add(index, toUpperCase);
int index=names.size();
对于(int i=0;i0){
指数=i;
打破
}
}
name.add(索引,toUpperCase);
所以,每当您从用户那个里得到新字符串时,您都会将它插入数组列表的正确位置


此方法速度非常慢,但对于家庭作业来说还行

请尝试下面的代码。您可以使用更高效的算法(如合并排序/选择排序等)替换排序算法

import java.util.Scanner;
import java.util.ArrayList;

class alsort{
  public static void main(String[] args) {
    ArrayList<String> names = new ArrayList<String>();
    Scanner scan = new Scanner(System.in);
    String name;
    do{
      System.out.println("Enter the next name: ");
      name = scan.nextLine();
      String toUpperCase = titleCase(name);
      if(!toUpperCase.equals("Stop")){
        names.add(toUpperCase);
      }
    } while(!name.equalsIgnoreCase("STOP"));

    System.out.println(names.toString());

    for(int i=0;i<name.length();i++){
        for(int j=i;j<=name.length();j++){
            if(names.get(i).compareTo(names.get(j))>0){
                String tmp=names.get(i);
                names.set(i, names.get(j));
                names.set(j, tmp);
            }
        }
    }

    System.out.println(names.toString());


  }
  public static String titleCase(String s){
    String output = s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
    return output;
  }
}
import java.util.Scanner;
导入java.util.ArrayList;
阿尔索特级{
公共静态void main(字符串[]args){
ArrayList name=新的ArrayList();
扫描仪扫描=新扫描仪(System.in);
字符串名;
做{
System.out.println(“输入下一个名称:”);
name=scan.nextLine();
String toUpperCase=标题酶(名称);
如果(!toUpperCase.equals(“停止”)){
name.add(toUpperCase);
}
}而(!name.equalsIgnoreCase(“STOP”);
System.out.println(names.toString());

对于(int i=0;i请尝试以下代码。您可以使用更高效的算法(如合并排序/选择排序等)替换排序算法

import java.util.Scanner;
import java.util.ArrayList;

class alsort{
  public static void main(String[] args) {
    ArrayList<String> names = new ArrayList<String>();
    Scanner scan = new Scanner(System.in);
    String name;
    do{
      System.out.println("Enter the next name: ");
      name = scan.nextLine();
      String toUpperCase = titleCase(name);
      if(!toUpperCase.equals("Stop")){
        names.add(toUpperCase);
      }
    } while(!name.equalsIgnoreCase("STOP"));

    System.out.println(names.toString());

    for(int i=0;i<name.length();i++){
        for(int j=i;j<=name.length();j++){
            if(names.get(i).compareTo(names.get(j))>0){
                String tmp=names.get(i);
                names.set(i, names.get(j));
                names.set(j, tmp);
            }
        }
    }

    System.out.println(names.toString());


  }
  public static String titleCase(String s){
    String output = s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
    return output;
  }
}
import java.util.Scanner;
导入java.util.ArrayList;
阿尔索特级{
公共静态void main(字符串[]args){
ArrayList name=新的ArrayList();
扫描仪扫描=新扫描仪(System.in);
字符串名;
做{
System.out.println(“输入下一个名称:”);
name=scan.nextLine();
String toUpperCase=标题酶(名称);
如果(!toUpperCase.equals(“停止”)){
name.add(toUpperCase);
}
}而(!name.equalsIgnoreCase(“STOP”);
System.out.println(names.toString());

对于注释中建议的(int i=0;i),在每次插入时维护排序数据结构的最简单方法是使用
TreeSet
或任何其他在内部维护排序顺序的数据结构。而不是声明
ArrayList
,您只需将代码修改为:

Set<String> names = new TreeSet<>();
Scanner scan = new Scanner(System.in);
String name;
do {
  System.out.println("Enter the next name: ");
  name = scan.nextLine();
  String toUpperCase = titleCase(name);
  if(!toUpperCase.equals("Stop")){
    names.add(toUpperCase);
  }
} while(!name.equalsIgnoreCase("STOP"));
Set name=new TreeSet();
扫描仪扫描=新扫描仪(System.in);
字符串名;
做{
System.out.println(“输入下一个名称:”);
name=scan.nextLine();
String toUpperCase=标题酶(名称);
如果(!toUpperCase.equals(“停止”)){
name.add(toUpperCase);
}
}而(!name.equalsIgnoreCase(“STOP”);
从Javadocs for TreeSet:

Set接口是根据equals操作定义的,但是TreeSet实例使用其compareTo(或compare)执行所有元素的比较方法,因此,从集合的角度来看,被该方法视为相等的两个元素是相等的。集合的行为是明确定义的,即使其顺序与相等不一致;它只是未能遵守集合接口的一般契约


如注释所示,每次插入时维护排序数据结构的最简单方法是使用
TreeSet
或任何其他在内部维护排序顺序的数据结构。您只需将代码修改为以下内容,而不是声明
ArrayList

Set<String> names = new TreeSet<>();
Scanner scan = new Scanner(System.in);
String name;
do {
  System.out.println("Enter the next name: ");
  name = scan.nextLine();
  String toUpperCase = titleCase(name);
  if(!toUpperCase.equals("Stop")){
    names.add(toUpperCase);
  }
} while(!name.equalsIgnoreCase("STOP"));
Set name=new TreeSet();
扫描仪扫描=新扫描仪(System.in);
字符串名;
做{
System.out.println(“输入下一个名称:”);
name=scan.nextLine();
String toUpperCase=标题酶(名称);
如果(!toUpperCase.equals(“停止”)){
name.add(toUpperCase);
}
}而(!name.equalsIgnoreCase(“STOP”);
从Javadocs for TreeSet:

Set接口是根据equals操作定义的,但是TreeSet实例使用其compareTo(或compare)执行所有元素的比较方法,因此,从集合的角度来看,被该方法视为相等的两个元素是相等的。集合的行为是明确定义的,即使其顺序与相等不一致;它只是未能遵守集合接口的一般契约

公共类SorterDarrayList扩展了ArrayList{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
@抑制警告(“未选中”)
公共void insertSorted(T值){
增加(价值);
可比cmp=(可比)值;
对于(int i=size()-1;i>0&&cmp.compareTo(get(i-1))<0;i--)
集合。交换(本,i,i-1);
}
公共静态void main(字符串[]s){
SorterDarrayList myList=新的SorterDarrayList();
myList.insertSorted(“ddd”);
myList.insertSorted