我是靠谱客的博主 坦率大碗,最近开发中收集的这篇文章主要介绍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");
			
	}
	
}

 

最后

以上就是坦率大碗为你收集整理的java进阶学习一之List的全部内容,希望文章能够帮你解决java进阶学习一之List所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部