java进阶学习一之List

List中的元素是有序的,且允许重复。重点掌握ArrayList和LinkedList

1.1 List接口相比Colleciton接口的新增方法

List接口比Collection接口中新增的几个实用方法:

  1. public Object get(int index) 根据下标,返回列表中的元素
  2. public Object add(int index, Object element);  在列表的指定位置插入指定元素.将当前处于该位置的元素(如果有的话)和所有后续元素向右移动
  3. public Object set(int index, Object element) ; 用指定元素替换列表中指定位置的元素
  4. public Object remove(int index)      移除列表中指定位置的元素

注意:list集合中的元素的索引与数组中元素的索引一样,均是从0开始。

 

1.2 ArrayList集合

底层通过数组扩容(Arrays.copuOf())实现动态可变集合,存储的必须是对象,不能存储基础数据类型。(储存地址连续)

package com.qianfeng.cl;

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

/**
 * 
 * @Title DemoArrayList.java
 * @Package com.qianfeng.cl
 * @Description 
 * @author CL 
 * @date 2020年3月5日
 * @version 1.0
 */
public class DemoArrayList {

	public static void main(String[] args) {
		test();
	}
	
	public static void test() {
		
		List<String> arrayList = new ArrayList<String>();
		
		//增
		for(int i = 1;i < 10; i++) {
			arrayList.add("jack"+i);
		}
		System.out.println("--------------------------");
		//删
		arrayList.remove(2);
		
		//改
		arrayList.set(3, "trom");
		
		//查
		//普通for循环
		for(int i = 0 ;i < arrayList.size();i++) {
			System.out.println(arrayList.get(i));
		}
		System.out.println("--------------------------");
		//增强for循环,尽量只进行打印操作,不进行其他操作
		for(String str:arrayList) {
			System.out.println(str);
		}
		System.out.println("--------------------------");
		//迭代器
		for(Iterator<String> iterator = arrayList.iterator();
				iterator.hasNext();System.out.println(iterator.next())) {
			
		}
		//清空操作
		arrayList.clear();
	}
}

1.3 LinkedList集合

底层数据使用双向链表进行储存,且每个链表结点都储存有头结点和尾结点的引用,存储的必须是对象,不能存储基础数据类型。(储存地址不连续)

LinkedList集合和ArrayList集合API方法一模一样

package com.qianfeng.cl;

import java.util.LinkedList;
import java.util.Iterator;
import java.util.List;
/**
 * 
 * @Title DemoLinkedList.java
 * @Package com.qianfeng.cl
 * @Description 
 * @author CL 
 * @date 2020年3月5日
 * @version 1.0
 */
public class DemoLinkedList {

	public static void main(String[] args) {
		test();
	}
	
	public static void test() {
		
		//LinkedList集合操作方法和ArrayList一模一样
		List<String> linkedList = new LinkedList<String>();
		
		//增
		for(int i = 1;i < 10; i++) {
			linkedList.add("jack"+i);
		}
		System.out.println("--------------------------");
		//删
		linkedList.remove(2);
		
		//改
		linkedList.set(3, "trom");
		
		//查
		//普通for循环
		for(int i = 0 ;i < linkedList.size();i++) {
			System.out.println(linkedList.get(i));
		}
		System.out.println("--------------------------");
		//增强for循环,尽量只进行打印操作,不进行其他操作避免出现错误
		for(String str:linkedList) {
			System.out.println(str);
		}
		System.out.println("--------------------------");
		//迭代器
		for(Iterator<String> iterator = linkedList.iterator();
				iterator.hasNext();System.out.println(iterator.next())) {
			
		}
		//清空集合
		linkedList.clear();
	}
}

1.4 ArrayList与LinkedList性能比较

package com.qianfeng.cl;

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

/**
 * 
 * @Title Test.java
 * @Package com.qianfeng.cl
 * @Description 测试速度
 * @author CL 
 * @date 2020年3月5日
 * @version 1.0
 */
public class Test {

	
	
	public static void main(String[] args) {
		
		List<Integer> arrayList = new ArrayList<Integer>();
		
		List<Integer> linkedList = new LinkedList<Integer>();
		
		//添加数据
		test1(arrayList);
		
		test1(linkedList);
		
		//修改数据
		test2(arrayList);
		
		test2(linkedList);
		
		//查询所有数据
		test3(arrayList);
		
		test3(linkedList);
		
		//删除所有数据
		test4(arrayList);
		
		test4(linkedList);
		
		//结果如下:
		//class java.util.ArrayList顺序添加耗时6ms
		//class java.util.LinkedList顺序添加耗时3ms
		//class java.util.ArrayList修改单个耗时82ms
		//class java.util.LinkedList修改单个耗时62ms
		//class java.util.ArrayList查询所有数据耗时2ms
		//class java.util.LinkedList查询所有数据耗时5545ms
		//class java.util.ArrayList删除所有数据耗时405ms
		//class java.util.LinkedList删除所有数据耗时2ms
		
	}
	
	//测试ArrayList和LinkedList添加数据的速度
	public static void test1(List<Integer> list) {
		
		long start = System.currentTimeMillis();
		
		for(int i = 0; i < 100000;i++) {
			list.add(i);
		}
		
		long end = System.currentTimeMillis();
		
		System.out.println(list.getClass()+"顺序添加耗时"+(end-start)+"ms");
		
	}
	
	
	//测试ArrayList和LinkedList修改数据的速度
	public static void test2(List<Integer> list) {
		
		long start = System.currentTimeMillis();
		
		for(int i = 0; i < 10000000;i++) {
			list.set(2,i);
		}
		
		long end = System.currentTimeMillis();
		
		System.out.println(list.getClass()+"修改单个耗时"+(end-start)+"ms");
		
	}
	//测试ArrayList和LinkedList查询数据的速度
	public static void test3(List<Integer> list) {
		
		long start = System.currentTimeMillis();
		
		for(int i = 0; i < list.size();i++) {
			list.get(i);//只查询不进行打印
		}
		
		long end = System.currentTimeMillis();
		
		System.out.println(list.getClass()+"查询所有数据耗时"+(end-start)+"ms");
		
	}
	//测试ArrayList和LinkedList删除数据的速度
	public static void test4(List<Integer> list) {
		
		long start = System.currentTimeMillis();
		
		for(int i = 0; i < list.size();) {
			list.remove(i);
		}
		
		long end = System.currentTimeMillis();
		
		System.out.println(list.getClass()+"删除所有数据耗时"+(end-start)+"ms");
			
	}
	
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值