二进制搜索和对两个数组使用SortKey-非常详细[Java]

二进制搜索和对两个数组使用SortKey-非常详细[Java],java,arrays,binary,key,Java,Arrays,Binary,Key,我正在制作一个程序,读取一个如下所示的文本文件: 3679 87 196 60 17914 12 18618 64 2370 65 584 85 18524 34 12024 5 6992 76 18410 56 所以列表是这样设置的,左栏是项目ID,右栏是库存中项目的编号(就像这是一个商店)。我需要这个程序做的是,将左

我正在制作一个程序,读取一个如下所示的文本文件:

  3679        87
   196        60
 17914        12
 18618        64
  2370        65
   584        85
 18524        34
 12024         5
  6992        76
 18410        56
所以列表是这样设置的,左栏是项目ID,右栏是库存中项目的编号(就像这是一个商店)。我需要这个程序做的是,将左列(项目ID)从最低到最高排序,然后按所示打印列表,并使正确的库存量与之对齐。所以它看起来像这样:

    184       14
    196       60
    206       31
    584       85
    768       85
    2370      65
    3433      5
    3679      87

    etc....
到目前为止我自己写的是,我导入文件,将数字分成两个不同的数组,这样我就可以使用array.sort()对ID进行排序

现在,我要做的是,确保如果我对ID进行排序,我可以让库存遵循其分配的ID。我已经对Java文档进行了一些搜索,找到了SortKey函数,我想知道如何使用它?或者这是否是正确的方法

这是我目前的代码:

   import java.io.File;
   import java.io.FileNotFoundException;
   import java.io.FileReader;
   import java.util.ArrayList;
   import java.util.Arrays;
   import java.util.List;
   import java.util.Scanner;

    public class Store {

     public static void main(String[] args) throws FileNotFoundException {

    // **************Scanner s = new
    // Scanner(input).useDelimiter("\\s*,\\s*");

    ArrayList<String> numbersString = new ArrayList<String>();

    ArrayList<Integer> numbers = new ArrayList<Integer>();
    ArrayList<Integer> ids = new ArrayList<Integer>();
    ArrayList<Integer> inventory = new ArrayList<Integer>();
    int arraySize = numbersString.size();

    List<Integer> l1 = new ArrayList<Integer>();
    List<Integer> l2 = new ArrayList<Integer>();

    Scanner s = new Scanner(new FileReader("file50.txt"));

    try {

        while (s.hasNext()) {
            l1.add(s.nextInt());
            l2.add(s.nextInt());
        }
        System.out.print(l1);
         System.out.println();
        System.out.print(l2);

        int[] list1 = new int[l1.size()];
        int[] list2 = new int[l2.size()];
        ArrayList<Integer> l3 = new ArrayList<Integer>();

        for (int x = 0; x <= l1.size() - 1; x++) {

            int n = l1.get(x);
            list1[x] = n;

        }
        // System.out.print(Arrays.toString(list1));
        for (int p = 0; p <= l2.size() - 1; p++) {

            int o = l2.get(p);
            list2[p] = o;

        }
        for(int y = 0; y < l1.size(); y++){


        }

        Arrays.sort(list1);
        Arrays.sort(list2);
        //System.out.println();
        //System.out.print(Arrays.toString(list1));

    }

    catch (Exception i) {

        i.printStackTrace();
    }

 }
     }
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入java.util.Scanner;
公共类商店{
公共静态void main(字符串[]args)引发FileNotFoundException{
//*************扫描仪s=新
//扫描仪(输入)。使用分隔符(\\s*,\\s*);
ArrayList numbersString=新的ArrayList();
ArrayList编号=新的ArrayList();
ArrayList ID=新的ArrayList();
ArrayList inventory=新的ArrayList();
int arraySize=numberString.size();
列表l1=新的ArrayList();
列表l2=新的ArrayList();
Scanner s=新的扫描仪(新的文件阅读器(“file50.txt”);
试一试{
而(s.hasNext()){
l1.添加(s.nextInt());
l2.加入(s.nextInt());
}
系统输出打印(l1);
System.out.println();
系统输出打印(l2);
int[]list1=新的int[l1.size()];
int[]list2=新int[l2.size()];
ArrayList l3=新的ArrayList();

对于(intx=0;x,这个问题适合映射 使用树映射(自动提供键的自然排序),因此根本不需要实现排序。
您的任务是用文件值填充树形图。

这个问题本身就是映射问题。(java中的键值存储) 使用树映射(自动提供键的自然排序),因此根本不需要实现排序。
您的任务是用文件值填充树状图。

好的,那么如果您说树状图不会排序,我如何让ID从最低ID排序到最高ID?树状图会自动将键按顺序排列(相应的值正确映射)。您的任务是逐行读取文件,并使用ID作为键和inventory作为值填充TreeMap。填充TreeMap后,您可以迭代并打印以确认这些值已排序。谢谢!这似乎是我要找的。再次感谢Shappy提供帮助。许多教程/示例都很有用可以在web上使用。如果在实现过程中遇到问题,请查看它们。一个简单的问题。我应该使用哪一个:TreeMap customSortingMap=newtreemap(Comparator-Comparator)还是TreeMap naturalOrderMap=newtreemap();好的,如果您说TreeMap不会排序,那么我如何让ID从最低ID排序到最高ID?TreeMap会自动将您的键按顺序排列(正确映射相应的值)。您的任务是逐行读取文件,并使用ID作为键和inventory作为值填充TreeMap。填充TreeMap后,您可以迭代并打印以确认这些值已排序。谢谢!这似乎是我要找的。再次感谢Shappy提供帮助。许多教程/示例都很有用可以在web上使用。如果您在实现中遇到问题,请查看它们。一个快速问题。我应该使用哪一个:TreeMap customSortingMap=new TreeMap(Comparator Comparator)或TreeMap naturalOrderMap=new TreeMap();