有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓从最高到最低排序,位置从另一个arraylist java更改

我有两个arraylist

一个是整数数组,另一个是字符串数组。这里我需要对整数数组值进行排序,从最高值排序到最低值。此时,我还需要移动字符串数组中的位置

例如:

字符串数组:[注册和行政主管,网页设计,IT-软件工程师,会计,网络工程师] 整数数组:[4,2,2,6,2]

但我需要上面的结果

字符串数组:[会计、注册和行政主管、IT-软件工程师、网络工程师、网站设计] 整数数组:[6,4,2,2,2]

需要对整数数组进行排序,同时更改字符串数组位置,如果整数数组中出现相同的值,则需要按字母顺序排序。我该怎么办

有最近的路吗


共 (5) 个答案

  1. # 1 楼答案

    试试这样的

    这将是您的数据结构

    class DataModel{
      int priority;
      String priorityName;
      DataModel(int priority,String priorityName){
           this.priority = priority; 
           this.priorityName = priorityName;
       }
    }
    

    现在创建这个类的数组列表dataArrayList<DataModel>

    使用方法按优先级对int数组进行排序

    for(int i=0; i < n; i++){
       for(int j=1; j < (n-i); j++){
    
                if(intArray[j-1] < intArray[j]){
    
                 //add the data of your largest int number in your int Array and use its position to get the data of your String array. 
                 dataArrayList.add(new DataModel(your_lagest_int, your_department)); 
    
            }
        }
    }
    

    您应该得到一个包含所有数据的排序Arraylist

  2. # 2 楼答案

    为什么不使用第三个类将所有字符串按权重分组呢

    创建一个比较器来排序WeightString,然后使用流API来使用数据

    public class WeightString {
        public String value;
        public int weight;
    
        public WeightString(String value, int weight) {
            this.value = value;
            this.weight = weight;
        }
    }
    
    public Comparator<WeightString> mWeightStringComparator = 
            (o1, o2) -> Integer.compare(o1.weight, o2.weight);
    
    
    // in code
    WeightString[] weightStrings = new WeightString[]{
            new WeightString("a", 12),
            new WeightString("b", 1),
            new WeightString("c", 8),
            new WeightString("d", 4)
    };
    
    Stream<WeightString> stringStream = Arrays.stream(weightStrings);
    stringStream.sorted(mWeightStringComparator);
    WeightString[] orderedWeightStrings = (WeightString[]) stringStream.toArray();
    
    //orderedWeightStrings : [b,d,c,a]
    
  3. # 3 楼答案

    List<Pair<String, Integer>> data= new ArrayList<Pair<String, Integer>();
    data.add(new Pair("Register & Head of Administration", 4));
    ...
    data.add(new Pair("Network Engineer", 2));
    
    Collections.sort(data, new Comparator<Pair<String, Integer>>() {
    @Override
    public int compare(final Pair<String, Integer> o1, final Pair<String, Integer> o2) {
        // TODO: implement your logic here, e.g.
        return o1.second.compareTo(o2.second);
    }
    
  4. # 4 楼答案

    在您的情况下,数组小意味着使用冒泡排序(冒泡排序对于大数组来说不是一种高性能)。根据交换字符串数组的位置对int数组进行排序,如下所示

                int intArray[] = new int[]{4, 2, 2, 6, 2};
                String strArray[]=new String[]{Accountant, Register & Head of Administration, IT - Software Engineer, Network Engineer,Web Designing}
                int n = intArray.length;
                int temp = 0,temp1=0;               
                for(int i=0; i < n; i++){
                        for(int j=1; j < (n-i); j++){                               
                                if(intArray[j-1] < intArray[j]){                                        
                                        temp = intArray[j-1];
                                        temp1=strArray[j-1];
                                        intArray[j-1] = intArray[j];
                                        strArray[j-1] = strArray[j];
                                        intArray[j] = temp;
                                        strArray[j] = temp1;
                                }                               
                        }
                }
    
  5. # 5 楼答案

    我希望这将有助于您:

    int[] intArray = new int[] { 4, 2, 2, 6, 2 };
    String[] strArray = new String[] { "Register & Head of Administration", "Web Designing", "IT - Software Engineer", "Accountant", "Network Engineer" };
    int tmp0 = 0;
    String tmp1 = "";
    for (int i = 0; i < intArray.length; i++) {
    
        for (int j = i + 1; j < intArray.length; j++) {
    
            if (intArray[j] > intArray[i]) {
    
                // swap in int-Array
                tmp0 = intArray[i];
                intArray[i] = intArray[j];
                intArray[j] = tmp0;
    
                // swap in string-Array
                tmp1 = strArray[i];
                strArray[i] = strArray[j];
                strArray[j] = tmp1;
            } else if (intArray[j] == intArray[i]) {
    
                // sorts alphabetically
                if (strArray[j].compareTo(strArray[i]) < 0) {
    
                    tmp1 = strArray[i];
                    strArray[i] = strArray[j];
                    strArray[j] = tmp1;
                }
            }
        }
    }
    
    //output
    for (int k = 0; k < intArray.length; k++) {
    
        System.out.println(strArray[k] + " " + intArray[k]);
    }
    

    输出:

    Accountant 6 Register & Head of Administration 4 IT - Software Engineer 2 NetworkEngineer 2 Web Designing 2