在Java ArrayList中查找max元素

时间:2013-05-13 12:10:10

标签: java arrays arraylist indexing max

我有这么简单的代码:

import java.util.ArrayList;
import java.util.List;

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Integer[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};
        Integer max = 2324;
        List<Integer> indexes = new ArrayList<Integer>();
            for (int e = 0; e < tab.length; e++) {
                if (tab[e] == max) {
                    indexes.add(new Integer(e));
                    System.out.println("Found max");
                }
            }
    }
}

这里的主要问题是我想找到tabmax值所在的每个索引。现在,它不起作用 - 它甚至没有显示发现最大消息一次,虽然它应该做3次。那问题呢?

好的,这终于奏效了,谢谢你们所有人:

public static void main(String[] args) {
        Integer[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};
        Integer max = 2324;
        List<Integer> indexes = new ArrayList<Integer>();
            for (int e = 0; e < tab.length; e++) {
                if (tab[e].intValue() == max.intValue()) {
                    indexes.add(Integer.valueOf(e));
                    System.out.println("Found max");
                }
            }
    }

8 个答案:

答案 0 :(得分:9)

更改

Integer[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};

int[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};
仅对从-128到127的值预先调用

Integer个对象。


如果您想留下Integer,可以更改

if (tab[e] == max) {

if (tab[e].equals(max)) {

因为它将检查对象是否相等,而不是引用相等。

答案 1 :(得分:3)

那是因为您要与==进行比较,而不是equals

答案 2 :(得分:3)

您正在使用==运算符,它不是原始int,而是类Integer的实例。基本上,您正在比较两个对象的引用,这两个对象是不同的。尝试使用:

if(tab[e].equals(max))

答案 3 :(得分:2)

您遇到的基本问题是您使用的是Integer,而不是int一个区别是,Integer是一个对象==,它将对两个不同对象的引用进行比较。 (不是那些对象的内容)

我建议你使用像int这样的原语而不是你可以使用的对象。

答案 4 :(得分:2)

您只能将原始值与==进行比较。由于Integer是一个对象,因此将tab[e] == max更改为tab[e].equals(max)

寻找equals vs ==

另请阅读:Java: int vs integer

答案 5 :(得分:2)

JVM正在缓存Integer值。

==仅适用于-128到127之间的数字

请参阅此处的说明:http://www.owasp.org/index.php/Java_gotchas#Immutable_Objects_.2F_Wrapper_Class_Caching

答案 6 :(得分:1)

使用以下三者之一:1。tab[e].intValue() == max或2. int max = 2324;或3.使用equals()类的Integer方法。

答案 7 :(得分:1)

试试这个:

if (tab[e].intValue() == max.intValue()) {

if (tab[e].intValue() == max) {

如果您使用的是Integer对象而不是原始int,那么使用比较运算符(如==),至少一个操作数应该是原始的(其他操作数将被隐式转换)。

或者您应该使用equals方法进行平等