相关疑难解决方法(0)

按值对地图<键,值>进行排序

我是Java的新手,经常发现我需要对Map<Key, Value>值进行排序.

由于值不是唯一的,我发现自己将其转换keySet为a array,并通过数组排序对该数组进行排序,并使用自定义比较器对与键关联的值进行排序.

有没有更简单的方法?

java sorting collections dictionary

1569
推荐指数
27
解决办法
134万
查看次数

如何在java中对多个数组进行排序

我试图按字典顺序对三个数组进行排序.阵列通过公共阵列彼此相关.如果我证明,它更容易解释:

int[] record = new int[4];
String [] colors = {"blue", "yellow", "red", "black"};
String [] clothes = {"shoes", "pants", "boots", "coat"};
Run Code Online (Sandbox Code Playgroud)

在控制台上打印时,我希望将它们放在类似下面的三列中:

未排序:

Record  Color   Clothes
0       blue    shoes
1       yellow  pants
2       red     boots
3       black   coat
Run Code Online (Sandbox Code Playgroud)

按颜色排序:

Record  Color   Clothes
3       black   coat
0       blue    shoes
2       red     boots
1       yellow  pants
Run Code Online (Sandbox Code Playgroud)

按衣服排序:

Record  Color   Clothes
2       red     boots
3       black   coat
1       yellow  pants
0       blue    shoes
Run Code Online (Sandbox Code Playgroud)

我发现了一个类似于我的场景的先前答案,但是它比较了整数而不是字符串,而且我在使用该compareTo()方法时遇到了麻烦并且Arrays.sort()达到了我想要的输出.

任何帮助,将不胜感激!

java arrays sorting

20
推荐指数
2
解决办法
1万
查看次数

如何对数组进行排序并在java中跟踪索引

我试图排序(减少)一个整数数组,但跟踪原始索引.

我的意思是,例如,如果我有这个数组:

b[] = { 4, 5, 3, 5, 2 }   
Run Code Online (Sandbox Code Playgroud)

在使用Arrays.sort(b,Collections.reverseOrder())后,它变成了(我使用的是Arrays.sort,因为在这个例子中b只有长度为5,但在我的问题中,b的长度可以是1 <b.length <70

b[] = { 5, 5, 4, 3, 2 }
Run Code Online (Sandbox Code Playgroud)

但我想以某种方式拥有原始索引,我的意思是知道这一点

bOrignalIndex[] = { 1, 3, 0, 2, 4 }
Run Code Online (Sandbox Code Playgroud)

我不知道我的问题是否清楚,请问我一切.我在C++中有这段代码可以提供帮助,因为它可以满足我的需要

n=4
m=5
tord[] =  
[0] 0   
[1] 1   
[2] 2   
[3] 3   
ts[] =      
[0] 4   
[1] 5   
[2] 3   
[3] 5   



   tord[MAXT], ts[MAXT];
       bool ord(int a, int b){
        return ts[a] > ts[b];    }
    int main(void){
        for(int m, n; scanf("%d %d", &m, &n)){
            bool possible = …
Run Code Online (Sandbox Code Playgroud)

java arrays sorting

11
推荐指数
1
解决办法
2万
查看次数

Java:使用indexOf方法基于另一个数组对数组进行排序

我想基于另一个数组(索引)的排序顺序迭代两个数组(A,B),在这种情况下是10,34,32,21.

String[] A: a, b, c, d
String[] B: e, f, g, h
int[] indexes: 10, 34, 32, 21
Run Code Online (Sandbox Code Playgroud)

在这里为坏榜样道歉.我更新了索引数组以清除混淆.

预期的输入和输出

输入是三个数组.我想使用索引数组的排序迭代A,B.即我想找到一种方法来使用顺序(a,d,c,b)迭代A并使用顺序(e,h,g,f)迭代B

我的方法:

我用一种我认为与另一种方法相同的解决方案解决了这个问题.但是,第二种方法不起作用.如果有人可以解释为什么它不起作用我会很感激,因为我认为这会让我更好地理解Collections.sort在java中的工作原理.

List<Integer> indexOrder = new ArrayList<>(indexes.length);

for (int i = 0; i < indexes.length; i++) {
    indexOrder.add(i);
}

Collections.sort(indexOrder, Comparator.comparing((Integer s) -> indexes[s]));
Run Code Online (Sandbox Code Playgroud)

这个线程的启发,我创建了一个ArrayList(更喜欢AList not array),其值为(1,2,3 ... indices.length),然后使用带有ref的比较器对其进行排序.索引.上述代码按预期工作.

但是,如果我将最后一行末尾的索引[s]更改为索引[indexOrder.indexOf(s)].排序会产生错误的结果.如果ArrayList的索引与其值相同,为什么indexOf(s)给出的结果与s不同.

Collections.sort(indexOrder, Comparator.comparing((Integer s) -> indexes[indexOrder.indexOf(s)]));
Run Code Online (Sandbox Code Playgroud)

java sorting algorithm lambda comparator

8
推荐指数
1
解决办法
613
查看次数

对数组进行排序并反映另一个数组中的更改

我在Java中有一系列双打:arr1我想要排序.最可能的第一种选择是实用方法Arrays.sort(double[]).

这个想法是,我想同样的变化(在例如值index i在与值互换index jarr1),以反映在另一个整数数组:arr2(即在相同的索引值也发生变化,在读出arr2).

有没有一种简单的方法(一招)在Java中实现这一目标?或者唯一的方法是自己实现排序算法?

更新:我看到人们建议用一个包含2个值的对象数组替换两个数组(一个来自arr1,一个来自arr2).这不会带来一些效率惩罚.换句话说,排序对象数组的效率是否低于基本类型数组(在这种情况下是双打的)?

数据完全是静态的.它很大(它适合内存)但是静态.

java arrays sorting

7
推荐指数
1
解决办法
6200
查看次数

根据另一个列表的值对列表进行排序 - Java

一个名字列表:(未分类)例如[保罗,犯规,标记]

另一个带整数的列表:例如 [5,2,6]

第二个列表中的值是每个人(名称)"选择"的数字,因此paul的数字为5,犯规的数字为2,标记的数字为6.

我正在尝试根据降序排列的第二个列表的值对名称列表进行排序.我不能使用地图,因为我需要在我的程序上的其他场合使用这两个列表.

通过排序方法,我得到了这样的列表: [paul,mark,foul]

正如你所看到的,它没有像我想要的那样排序.

正确的一个是: [大关,保罗犯规]

但我无法找到代码上的错误.

public ArrayList<String> sortNames(ArrayList<Integer> results){
    String tmp;
    for (int k=0; k<Names.size()-1; k++) {

        boolean isSorted=true;
        for (int i=1; i<Names.size()-k; i++) {

             if (results.get(i)>results.get(i-1)  ) {

                tmp=Names.get(i);
                Names.set(i,Names.get(i-1));
                Names.set(i-1,tmp);

                isSorted=false;
            }
        }
        if (isSorted) break;
    }
    return Names;

}
Run Code Online (Sandbox Code Playgroud)

编辑!!!在下面的答案的帮助下,代码是:

    public ArrayList<String> sortNames(ArrayList<Integer> results){
        String tmp2;
        int tmp;
        for (int k=0; k<Names.size()-1; k++) {

            boolean isSorted=true;
            for (int i=1; i<Names.size()-k; i++) {

                 if (results.get(i)>results.get(i-1)  ) { …
Run Code Online (Sandbox Code Playgroud)

java sorting

5
推荐指数
2
解决办法
1万
查看次数

使用Arrays.sort()之后如何将数组反转到其初始位置?

我不得不对数组进行排序以找到它的中位数,但现在我需要恢复数组的初始值,把它放在原样.那可能吗?

java

1
推荐指数
1
解决办法
66
查看次数