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 查询速度慢,增删快 特点分析:
/*
向链表数据结构中添加元素的时候,一个元素会被分成两部分;一部分存储的是当前元素,另一部分存储的是下一个元素的内存地址;
如上图所示:第一个元素被分成两部分,一部分存储的就是当前元素"张三",另一部分存储的是下一个元素"李四"的内存地址;
而"李四"元素的第二部分存储的是"王五"元素的内存地址;这样一环扣一环,就形成了链表结构;
查询速度慢:是因为每个元素的内存地址都是不连续的,所以查询的时候需要遍历所有的元素;如果元素比较多,就会很慢;
增加元素快:假如在"张三"元素和"李四"元素之间添加一个元素"狗娃",因为每一个元素对象在内存中都有自己的地址,
所以只需要在"张三"元素的第二部分存储"狗娃"元素的内存地址,然后再将"狗娃"元素第二部分
存储"李四"元素的内存地址,这样就添加成功了;对别的元素不需要任何操作,所以说增加元素快;
删除元素快:假如要删除元素"王五",那么只需要将"李四"元素的第二部分存储"王五"下一个元素的内存地址就可以了;
"王五"元素的内存地址没有被任何元素存储的时候,会自动被当做垃圾回收;所以删除元素快;
*/
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 查询速度慢,增删快 特点分析:
/*
向链表数据结构中添加元素的时候,一个元素会被分成两部分;一部分存储的是当前元素,另一部分存储的是下一个元素的内存地址;
如上图所示:第一个元素被分成两部分,一部分存储的就是当前元素"张三",另一部分存储的是下一个元素"李四"的内存地址;
而"李四"元素的第二部分存储的是"王五"元素的内存地址;这样一环扣一环,就形成了链表结构;
查询速度慢:是因为每个元素的内存地址都是不连续的,所以查询的时候需要遍历所有的元素;如果元素比较多,就会很慢;
增加元素快:假如在"张三"元素和"李四"元素之间添加一个元素"狗娃",因为每一个元素对象在内存中都有自己的地址,
所以只需要在"张三"元素的第二部分存储"狗娃"元素的内存地址,然后再将"狗娃"元素第二部分
存储"李四"元素的内存地址,这样就添加成功了;对别的元素不需要任何操作,所以说增加元素快;
删除元素快:假如要删除元素"王五",那么只需要将"李四"元素的第二部分存储"王五"下一个元素的内存地址就可以了;
"王五"元素的内存地址没有被任何元素存储的时候,会自动被当做垃圾回收;所以删除元素快;
*/
相关文章推荐
- Java学习笔记之集合(二):List集合的常用方法
- Java集合源码学习笔记(五)ArrayList,LinkedList,Vector和Hashtable,HashMap的比较
- java 集合学习笔记1-Collection 集合遍历 List子类特点
- java1.8 常用集合源码学习:LinkedList
- JAVA学习第三十四课 (常用对象API)—List集合及其子类特点
- Java集合源码学习笔记(三)LinkedList分析
- java学习笔记—自定义实现linkedList集合
- 9.2-全栈Java笔记:List接口的特点和常用方法
- java 集合学习笔记2-ArrayList LinkedList Vector 泛型 增强for 可变参数
- Java学习笔记(七)——获取类中方法的信息,java的LinkedList
- JAVA学习第三十五课(常用对象API)—Vector、LinkedList、ArrayList集合演示
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与LinkedHashSet类))
- 学习笔记_毕向东 Java_集合框架_LinkedList 2014.7.22
- 黑马程序员----List集合中的另外两个小弟,Vector LinkedList(实现结构,本身特点,自己的独有方法). 泛型技术:
- jdk集合常用方法分析之ArrayList&LinkedList&以及两者的对比分析
- 深入Java集合学习系列:LinkedList的实现原理
- JAVA学习中的一点小发现:LinkedList中.poll()方法在输出时使用应注意的小点
- (9) java ---- 集合框架图 ArrayList,LinkedList,Vector各自的性能特点及区别
- JAVA学习第三十八课(常用对象API— Map集合及其常用方法
- java学习笔记(二)——JFrame常用方法