Java学习笔记之集合(四):LinkedList集合的特点和常用方法

package com.collection;

import java.util.Iterator;
import java.util.LinkedList;

import org.junit.Test;

/*
集合的体系:
----| Collection: 单例集合的根接口
-------| List:实现了List接口的集合类,具备的特点:有序,可重复;
----------| ArrayList:底层是维护了一个Object数组实现的;特点:查询速度快,增删慢;
----------| LinkedList:底层是使用了链表数据结构实现的;特点:查询速度慢,增删快;

LinkedList特有的方法:
	1、方法:
		addFirst(E e):	将元素添加到集合的起始位置;
		addLast(E e):	将元素添加到集合的末尾位置;
		getFirst():		获取集合的第一个元素;
		getLast():		获取集合的最后一个元素;
		removeFirst():	删除集合的第一个元素,并返回该元素;
		removeLast():	删除集合的最后一个元素,并返回该元素;	
	2、数据结构:
		栈:先进后出;主要是用于实现堆栈数据结构的存储方式;
			push():		将元素添加到集合的起始位置;
			pop():		删除集合的首元素,并返回该元素;
		队列:先进先出;主要是使用LinkedList模拟队列数据结构的存储方式;
			offer():	将元素添加到集合的末尾位置;
			poll():		删除集合的首元素,并返回该元素;	
	3、descendingIterator():
		返回逆序的迭代器对象;	
		
----------| Vector:

-------| Set:实现了Set接口的集合类,具备的特点:无序,不可重复;
 */

public class Demo4 {

	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Test
	public void test1(){
		LinkedList list = new LinkedList();
		list.add("张三");
		list.add("李四");
		list.add("王五");
		System.out.println("集合中的元素:" + list);
		
		list.addFirst("冯二"); 	// 将元素添加到集合的起始位置;
		list.addLast("赵六"); 	// 将元素添加到集合的末尾位置;
		System.out.println("集合中的元素:" + list);
		
		System.out.println("---------------");
		
		System.out.println("集合的第一个元素:" + list.getFirst()); // 获取集合的第一个元素
		System.out.println("集合的最后一个元素:" + list.getLast()); // 获取集合的最后一个元素	
		
		System.out.println("删除集合的第一个元素为:" + list.removeFirst());
		System.out.println("删除集合的最后一个元素为:" + list.removeLast());
		System.out.println("集合中的元素:" + list);
	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Test
	public void test2(){
		LinkedList list = new LinkedList();
		list.add("张三");
		list.add("李四");
		list.add("王五");

		list.push("陈一");	// 将元素插入集合的起始位置;
		System.out.println("集合中的元素:" + list);
		System.out.println("删除集合的首元素:" + list.pop()); // 删除集合的首元素
		System.out.println("集合中的元素:" + list);
		
		System.out.println("---------------");
		
		list.offer("田七");	// 将元素添加到集合的末尾位置;
		System.out.println("集合中的元素:" + list);
		System.out.println("删除集合的首元素:" + list.poll()); // 删除集合的首元素
		System.out.println("集合中的元素:" + list);
	} 
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Test
	public void test3(){
		LinkedList list = new LinkedList();
		list.add("张三");
		list.add("李四");
		list.add("王五");
		
		Iterator it = list.descendingIterator();
		while (it.hasNext()){
			System.out.println(it.next()); // 逆向迭代
		}
	}	
}

LinkedList 查询速度慢,增删快 特点分析:


/*
向链表数据结构中添加元素的时候,一个元素会被分成两部分;一部分存储的是当前元素,另一部分存储的是下一个元素的内存地址;
如上图所示:第一个元素被分成两部分,一部分存储的就是当前元素"张三",另一部分存储的是下一个元素"李四"的内存地址;
而"李四"元素的第二部分存储的是"王五"元素的内存地址;这样一环扣一环,就形成了链表结构;

查询速度慢:是因为每个元素的内存地址都是不连续的,所以查询的时候需要遍历所有的元素;如果元素比较多,就会很慢;

增加元素快:假如在"张三"元素和"李四"元素之间添加一个元素"狗娃",因为每一个元素对象在内存中都有自己的地址,
	所以只需要在"张三"元素的第二部分存储"狗娃"元素的内存地址,然后再将"狗娃"元素第二部分
	存储"李四"元素的内存地址,这样就添加成功了;对别的元素不需要任何操作,所以说增加元素快;
	
删除元素快:假如要删除元素"王五",那么只需要将"李四"元素的第二部分存储"王五"下一个元素的内存地址就可以了;
	"王五"元素的内存地址没有被任何元素存储的时候,会自动被当做垃圾回收;所以删除元素快;
 */













评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值