相关疑难解决方法(0)

Google Guava vs. Apache Commons

我一直在寻找Java中的双向映射实现,并偶然发现了这两个库:

两者都是免费的,具有我正在寻找的双向地图实现(Apache中的BidiMap,Google中的BiMap),几乎相同的大小(Apache 493 kB,Google 499 kB)[编辑:不再是真的!]并且似乎在各方面都和我很相似.

我应该选择哪一个,为什么?是否有其他等效替代方案(必须是免费的并至少具有双向映射)?我正在使用最新的Java SE,所以不需要人为地限制Java 5或类似的东西.

java collections apache-commons guava

209
推荐指数
3
解决办法
6万
查看次数

当参数字符串为null时,int compareTo()应该返回什么?

据说当输入参数为null时,compareTo()应抛出NullPointerException.但是,我正在实现一个需要将字段与String类型进行比较的类.这些字段不必是强制性的.我想知道在这种情况下,

1)当输入为空时我应该返回什么?任何非空字符串在字典上是大于还是小于null?

2)如果这被认为是不好的做法,是否有任何支持性论点?我应该强制用户使用空字符串吗?如果使用空字符串,那不会混淆字段不适用的情况和字段为空的情况吗?如果必须抛出异常,那么除了在手册中警告用户之外,我还能做什么?

编辑:我可能不会在这里清楚地表达自己,但在我正在实现的程序中,可以为null的字符串是所有字段或类,它们不应为null.换句话说,comparisonTo()使用的对象不能为null,只有它们的私有字段可以.所以在这种情况下,我相信如果我正确地实现了compareTo(),它就不会违反传递要求,因为具有空字段的类总是被认为是相同的.我是对的还是我在解释这个错误?

谢谢大家的答案!

java string null nullpointerexception compareto

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

为什么我的比较方法抛出异常 - 比较方法违反了它的一般合同!

为什么这个代码

public class SponsoredComparator implements Comparator<SRE> {

    public boolean equals(SRE arg0, SRE arg1){
        return arg0.getSponsored()==arg1.getSponsored();
    }

    public int compare(SRE object1, SRE object2) {
        Log.d("SponsoredComparator","object1.getName() == "+ object1.getName());
        Log.d("SponsoredComparator","object1.getSponsored() == "+ object1.getSponsored());
        Log.d("SponsoredComparator","object2.getName() == "+ object2.getName());
        Log.d("SponsoredComparator","object2.getSponsored() == "+ object2.getSponsored());
        Log.d("SponsoredComparator","compare return == "+ (object1.getSponsored() && object2.getSponsored() ? 0 : object1.getSponsored() ? -1 : 1));
        return object1.getSponsored() && object2.getSponsored() ? 0 : object1.getSponsored() ? -1 : 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

抛出此异常: ERROR/AndroidRuntime(244): java.lang.IllegalArgumentException: Comparison method violates its general contract!
ERROR/AndroidRuntime(4446): at java.util.TimSort.mergeLo(TimSort.java:743) …

java android contract comparator

14
推荐指数
3
解决办法
3万
查看次数

java提供了一个内置的静态String.Compare方法吗?

在比较字符串时,我宁愿不依赖实例方法,以免调用该方法的字符串为空.在.NET中,我只使用静态String.Compare(string,string,bool)方法.java提供了类似的内置"null-safe"字符串比较实用程序,还是我必须实现自己的?

java string static compare

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

带有null键的Java不区分大小写的映射

Java中是否存在使用区分大小写的字符串匹配的Map实现,但是还支持null键?我知道

new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER)
Run Code Online (Sandbox Code Playgroud)

支持不区分大小写的String键匹配,但不支持null键.

java collections null case-insensitive

13
推荐指数
3
解决办法
1228
查看次数

从主要包含空值的可比较数据列表中获取最小值和最大值的最佳方法是什么?

我在考虑这样的事情:

public static <T extends Comparable<T>> T minOf(T...ts){        
    SortedSet<T> set = new TreeSet<T>(Arrays.asList(ts));
    return set.first();
}

public static <T extends Comparable<T>> T maxOf(T...ts){
    SortedSet<T> set = new TreeSet<T>(Arrays.asList(ts));
    return set.last();
}
Run Code Online (Sandbox Code Playgroud)

但是不安全,这也是我想要的.

你知道解决这个问题的更好方法吗?

编辑:

评论后我也试过min():

public static <T extends Comparable<T>> T minOf(T...ts){        
    return Collections.min(Arrays.asList(ts), new Comparator<T>(){

        public int compare(T o1, T o2) {
            if(o1!=null && o2!=null){
                return o1.compareTo(o2);
            }else if(o1!=null){
                return 1;
            }else{
                return -1;  
            }
        }});
}
Run Code Online (Sandbox Code Playgroud)

你对那个怎么想的?

java collections comparable

6
推荐指数
2
解决办法
4万
查看次数