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

来源:互联网 发布:淘宝卖衣服代理兼职 编辑:程序博客网 时间:2024/05/17 03:19

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" })@Testpublic 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" })@Testpublic 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" })@Testpublic 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 查询速度慢,增删快 特点分析:


/*向链表数据结构中添加元素的时候,一个元素会被分成两部分;一部分存储的是当前元素,另一部分存储的是下一个元素的内存地址;如上图所示:第一个元素被分成两部分,一部分存储的就是当前元素"张三",另一部分存储的是下一个元素"李四"的内存地址;而"李四"元素的第二部分存储的是"王五"元素的内存地址;这样一环扣一环,就形成了链表结构;查询速度慢:是因为每个元素的内存地址都是不连续的,所以查询的时候需要遍历所有的元素;如果元素比较多,就会很慢;增加元素快:假如在"张三"元素和"李四"元素之间添加一个元素"狗娃",因为每一个元素对象在内存中都有自己的地址,所以只需要在"张三"元素的第二部分存储"狗娃"元素的内存地址,然后再将"狗娃"元素第二部分存储"李四"元素的内存地址,这样就添加成功了;对别的元素不需要任何操作,所以说增加元素快;删除元素快:假如要删除元素"王五",那么只需要将"李四"元素的第二部分存储"王五"下一个元素的内存地址就可以了;"王五"元素的内存地址没有被任何元素存储的时候,会自动被当做垃圾回收;所以删除元素快; */