小编Vic*_* J.的帖子

Java中的通配符Generic和<?超级T>意义,下限或上限

所以我正在阅读泛型方法,我感到困惑.我先说一下这个问题:

在这个例子中:假设我需要一个适用于任何类型T的selectionSort版本,通过使用调用者提供的外部可比较.

第一次尝试:

public static <T> void selectionSort(T[] arr, Comparator<T> myComparator){....}
Run Code Online (Sandbox Code Playgroud)

假设我有:

  • 定义的车辆类
  • 创建了VehicleComparator实施比较器,同时按价格比较车辆.
  • 创建卡车扩展车辆
  • 实例化卡车[] arr; VehicleComparator myComparator

现在,我这样做:

selectionSort(arr, myComparator);
Run Code Online (Sandbox Code Playgroud)

并且它不起作用,因为myComparator不适用于Vehicle的任何子类.

然后,我这样做:

public static <T> void selectionSort(T[] arr, Comparator<? super T> myComparator){....}
Run Code Online (Sandbox Code Playgroud)

这个声明会起作用,但我不完全确定我一直在做什么......我知道使用是要走的路.如果"?super T"的意思是"一个未知的超类型T",那么我是强加上限还是上限?为什么超级?我的目的是让T的任何子类使用myComparator,为什么"?super T".如此困惑......如果您对此有任何见解我会很感激..

谢谢!

java generics extends wildcard bounded-wildcard

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

Unix Command Awk:查找文件中最长的字符串

我知道这可能是一个老问题,许多人已经解决了这个问题; 但是,我的版本需要一点点扭曲.

所以我有一个文件,我称之为任务.对于这里的简单性,它只有4个条目:

约翰

克里斯蒂娜

克里斯汀

汤姆

现在,我想使用awk获取此文件中最长的名称,我希望它能同时返回Christina和Christine.

这是我到目前为止:

<quest awk '{ if(length>x) {x =length; y=$0} } END {print y}'
Run Code Online (Sandbox Code Playgroud)

它将回归克里斯蒂娜.我认为只用一行就可以完成,但我遇到了一些麻烦,想出一个聪明的方法来做到这一点.如果你能提供帮助我感激不尽!当然,我更喜欢单行.

unix awk command-line

3
推荐指数
2
解决办法
1024
查看次数

Python,串联两个列表

我是python的新手,我需要这样做:

lines = ['apple','bear']
signed=['aelpp','aber']
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

res = ['aelpp apple', 'aber bear']
Run Code Online (Sandbox Code Playgroud)

如果你能提供帮助,我将不胜感激!我试过简单地使用+和join()函数,但没有得到我想要的东西.

python string list concatenation python-2.7

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

使用XOR交换两个指针

我有一个关于使用XOR两个交换两个字符串文字的快速问题.

所以我有以下内容:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void intSwap(int *a, int *b){
    *a=*a^*b;
    *b=*a^*b;
    *a=*a^*b;
}


void swapString(char **a, char **b){
    char *temp=*a;
    *a=*b;
    *b=temp;
}

void main(){
    char *s= "ha";
    char *t= "Oh";

    printf("%s and %s \n",s,t); // prints ha Oh
    swapString(&s,&t);
    printf("%s and %s \n",s,t); // prints Oh ha


    int a=10;
    int b=5;
    printf("%d %d\n",a,b); //print 10 5
    intSwap(&a,&b);
    printf("%d %d\n",a,b); //print 5 10
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用二进制运算XOR来表示intSwap.但是,当我尝试使用swapString做同样的事情时,它不起作用.

我收到错误消息说:二进制操作数无效^(有'char*'和'char*')

你知道如何使用XOR交换两个字符串文字吗?在C中有可能吗?谢谢!

c swap xor

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