Java编程基础之ArrayList和LinkedList的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011466469/article/details/88849381

先来一张菜鸟教程java集合框架介绍的大图,虽然错综复杂,但也有迹可循,本篇不该直接对上面两个实现类进行说明:

但从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。

2、所以这篇就是对上面接口的实现类进行举例代码说明:先是ArrayList的实现说明:

import java.util.ArrayList;

/**
 * 单列集合有Collection Collection集合常用子接口有List 和set Collection是层次结构中的根接口 

List和set是子接口,List以及他的实现类 特点是可存重复元素,Set以及他的实现类 特点是不可有重复元素 List接口的实现类最常用的有Arraylist
 * 特点是可存重复元素 Set接口的实现类最常用的有HashSet TreeSet 特点是不可有重复元素
 * 
 * 双列集合有MAP,双列指的是键值对的形式存储 MAP也是个接口,java里面实现好的类有HashMap
 * 
 * arraylist查询效率比较快,增删不建议使用arraylist。底层是用数组实现,使用下标索引查询效率高
 */
public class ArrayListDemo {

	public static void main(String[] args) {
		// 创建集合对象,<>里面定义数据类型,new 对象的大小:如果知道就指定,资源不浪费,如果不知道就为空
		ArrayList<String> cars = new ArrayList<String>();
		// 往集合里面添加元素
		cars.add("hello");
		cars.add("world");

		// 获取集合的大小元素个数
		int size = cars.size();

		// for循环遍历集合元素,
		for (int i = 0; i < cars.size(); i++) {

			// get()获取集合的元素
			System.out.println(i + "索引位的元素:" + cars.get(i));

		}
		// 可以使用高级for,只是不知道索引
		for (String car : cars) {
			System.out.println(car);
		}

		// remove移除集合元素
		cars.remove(size - 1);
		System.out.println("演示一下移除元素:");
		for (String car : cars) {
			System.out.println(car);
		}
	}
}

再说LinkedList类的说明: 

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

public class LinkedListDemo {

	/**
	 * ArrayList {0,1,2,3,4,5,6},如果从最后的位置增删的话,用ArrayList比较快 LinkedList
	 * 如果从最开始的位置增删的话,用linkedList 比较快 数据量小,ArrayList和LinkedList的方法没有多大差别
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		// 创建集合对象,<>里面定义数据类型,new 对象的大小:如果知道就指定,资源不浪费,如果不知道就为空
		LinkedList<String> cars = new LinkedList<String>();
		// 往集合里面添加元素
		cars.add("hello");
		cars.add("world");

		// 获取集合的大小元素个数
		int size = cars.size();

		// for循环遍历集合元素,
		for (int i = 0; i < cars.size(); i++) {

			// get()获取集合的元素
			System.out.println(i + "索引位的元素:" + cars.get(i));

		}
		// 可以使用高级for,只是不知道索引
		for (String car : cars) {
			System.out.println(car);
		}

		// remove移除集合元素
		cars.remove(size - 1);
		System.out.println("演示一下移除元素:");
		for (String car : cars) {
			System.out.println(car);
		}

		// list对象储存的数据类型是integer
		List<Integer> llist = new LinkedList<Integer>();
		List<Integer> alist = new ArrayList<Integer>();
		// 另一个add增加元素的方法,给指定索引位置增加元素
		llist.add(1, 123);

	}

}

最后比较两者的在同一场景下的执行效率: 

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


public class CompareListDemo {
// 测试ArrayList和LinkedList两个类实现List接口的性能比较

	public static void runDuration(List<Integer> list, String listType) {
		System.out.println("\n duration方法的开始,用的集合是:" + listType);
		for (int i = 0; i < 100000; i++) {
			list.add(i);
		}
		int size = list.size();
		int elementToAdd = size + 100000;
		long startTime = System.currentTimeMillis();

		for (int i = size; i < elementToAdd; i++) {
			list.add(i);
			// list.add(0, i);
		}

		// for (int i = 90000; i < 92000; i++) {
		// list.remove(i);
		// }
		//
		// for (int i = 0; i < 100; i++) {
		// list.remove(i);
		// }

		long endTime = System.currentTimeMillis();
		long duration = endTime - startTime;
		System.out.println("集合" + listType + "用时为" + duration + "毫秒");
	}

	public static void main(String[] args) {
		List<Integer> llist = new LinkedList<Integer>();
		List<Integer> alist = new ArrayList<Integer>();
		runDuration(alist, "ArrayList");
		runDuration(llist, "LinkedList");
	}
}

 3、因为很多时候,搜索到关键信息的人,从不看代码外的文字说明,直接盯着代码看或拷贝出来调试结果,所以我这上面直接上了三份代码,有兴趣的同学可以拿去直接测试。

猜你喜欢

转载自blog.csdn.net/u011466469/article/details/88849381
今日推荐