集合--LinkenList与ListIterator

LinkedList:链表。

package com.bjsxt.collection0910;

import java.util.ArrayList;
import java.util.LinkedList;

/**
 * LinkedList 和 ArrayList 性能比较
 * 
 * @author yhl
 *
 */
public class LinkedListTest {

	public static void main(String[] args) {
		final int COUNT = 10000;
		//尾部添加
		long time = System.currentTimeMillis();
		ArrayList<String> list1 = new ArrayList<>();
		for (int i = 0; i < COUNT; i++) {
			list1.add("1");
		}
		//8ms
		System.out.println("cost = " + (System.currentTimeMillis() - time));

		time = System.currentTimeMillis();
		LinkedList<String> list2 = new LinkedList<>();
		for (int i = 0; i < COUNT; i++) {
			list2.add("1");
		}
		//15ms
		System.out.println("cost = " + (System.currentTimeMillis() - time));
		
		
		//遍历
		time = System.currentTimeMillis();
		for (int i = 0; i < COUNT; i++) {
			list1.get(i);
		}
		//0ms
		System.out.println("cost = " + (System.currentTimeMillis() - time));

		time = System.currentTimeMillis();
		for (int i = 0; i < COUNT; i++) {
			list2.get(i);
		}
		//10816ms
		System.out.println("cost = " + (System.currentTimeMillis() - time));
		
		//插入元素  头部
		time = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			list1.add(0, "2");
		}
		//2370ms
		System.out.println("cost = " + (System.currentTimeMillis() - time));

		time = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			list2.add(0, "2");
		}
		//11ms
		System.out.println("cost = " + (System.currentTimeMillis() - time));
		
		//中间插入
		time = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			list1.add(list1.size()>>1, "2");
		}
		//3274ms
		System.out.println("cost = " + (System.currentTimeMillis() - time));

		time = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			list2.add(list2.size()>>1, "2");
		}
		//42491ms
		System.out.println("cost = " + (System.currentTimeMillis() - time));
		
	}

}

ListIterator:

是 java.util.Iterator 的子接口。
     是List 的专有迭代器  Set 是不能使用的。
     是一个功能更加强大的迭代器。
Iterator 对象,一次失效。只能实现单向遍历,可以删除 next 返回的元素对象。
ListIterator特点:
     主要增加了 修改  添加元素的方法。 还增加了从后往前遍历的方法。
     可以实现双向的遍历。
     我们可以认为ListIterator 不是一次性失效。

package com.bjsxt.collection0910;

import java.util.LinkedList;
import java.util.ListIterator;

public class ListIteratorTest {

	public static void main(String[] args) {
		LinkedList<String> list = new LinkedList<>();
		list.add("1");
		list.add("2");
		list.add("3");
		list.add("4");
		list.add("5");
		list.add("6");
		list.add("7");

		//得到 容器对象上的ListIterator 对象
		ListIterator<String> iterator = list.listIterator();
		while (iterator.hasNext()) {
			String str = iterator.next();
			//			iterator.remove();
			//增加的功能
			if(str.equals("2")){
				//将指定的元素添加到 next 方法返回的元素的后面
				//插入到 游标当前的位置。
				iterator.add("77");
			}
			
			if(str.equals("3")){
				//将next 方法返回的元素修改为指定的值
				iterator.set("33");
			}
			//判断 游标的前面是否有没有遍历的元素
//			iterator.hasPrevious()
			//让游标往前移动一个元素的位置,并返回被跨过的元素
			//			iterator.previous();
//			iterator.nextIndex()
//			iterator.previousIndex()
			System.out.println(str);
		}
		
		//从尾部往前遍历
		while (iterator.hasPrevious()) {
			String str = iterator.previous();
			System.out.println(str);
		}
		
		System.out.println(list);

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值