您的位置:首页 > 编程语言 > Java开发

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

2017-09-21 15:28 531 查看
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);
}

@Su
4000
ppressWarnings({ "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 查询速度慢,增删快 特点分析:



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

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

增加元素快:假如在"张三"元素和"李四"元素之间添加一个元素"狗娃",因为每一个元素对象在内存中都有自己的地址,
所以只需要在"张三"元素的第二部分存储"狗娃"元素的内存地址,然后再将"狗娃"元素第二部分
存储"李四"元素的内存地址,这样就添加成功了;对别的元素不需要任何操作,所以说增加元素快;

删除元素快:假如要删除元素"王五",那么只需要将"李四"元素的第二部分存储"王五"下一个元素的内存地址就可以了;
"王五"元素的内存地址没有被任何元素存储的时候,会自动被当做垃圾回收;所以删除元素快;
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐