recherche

Maison  >  Questions et réponses  >  le corps du texte

java中foreach语句如何获取数组下标

除了在foreach语句前声明一个变量,在foreach语句中对该变量进行自增运算,还有其他办法吗^_^

PHPzPHPz2886 Il y a quelques jours884

répondre à tous(2)je répondrai

  • 黄舟

    黄舟2017-04-17 15:56:56

    简单的告诉你就是不行,请用变量自增运算
    然后如果你的每个元素都是唯一的,并且遍历的是List,那么indexOf是可以用的,但是这有一个问题是性能还不如你自己用变量自增运算
    另外如果下标对你来说非常重要,那么为何不用传统的for语句呢

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:56:56

    刚才去试了一下,linkedlist用传统方式遍历速度非常慢,foreach却非常快,即使是加上了一个自定义自增变量。甚至说速度比线性表用传统循环遍历更快。

    public void testArrayList() {
            List<String> outList = new ArrayList<>(1000000);
            Date date = new Date();
            for(int i = 0; i < 1000000; i++) {
                outList.add(String.valueOf(i + 1));
            }
            Date date1 = new Date();
            System.out.println("构建对象用时:" + (date1.getTime() - date.getTime()));
            StringBuilder sb = new StringBuilder();
            Calendar cal = Calendar.getInstance();
            for(int i = 0; i < outList.size(); i++) {
                sb.append(outList.get(i));
            }
            Calendar cal1 = Calendar.getInstance();
            long time = cal1.getTimeInMillis() - cal.getTimeInMillis();
            System.out.println(time);
        }
    
    public void testLinkedList() {
            List<String> outList = new LinkedList<>();
            Date date = new Date();
            for(int i = 0; i < 1000000; i++) {
                outList.add(String.valueOf(i + 1));
            }
            Date date1 = new Date();
            System.out.println("构建对象用时:" + (date1.getTime() - date.getTime()));
            StringBuilder sb = new StringBuilder();
            Calendar cal = Calendar.getInstance();
            for(String num : outList) {
                sb.append(num);
            }
            Calendar cal1 = Calendar.getInstance();
            long time = cal1.getTimeInMillis() - cal.getTimeInMillis();
            System.out.println(time);
        }

    可以自行对比一下线性表和链表创建对象时间和遍历时间。

    répondre
    0
  • Annulerrépondre