java中foreach语句如何获取数组下标
PHPz
PHPz 2017-04-17 15:54:56
0
2
869

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

PHPz
PHPz

学习是最好的投资!

全部回覆(2)
黄舟

簡單的告訴你就是不行,請用變數自增運算
然後如果你的每個元素都是唯一的,並且遍歷的是List,那麼indexOf是可以用的,但是這有一個問題是性能還不如你自己用變數自增運算
另外如果下標對你來說非常重要,那麼為何不用傳統的for語句呢

大家讲道理

剛才去試了一下,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);
    }

可以自行對比線性表和鍊錶建立物件時間和遍歷時間。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板