List容器——LinkedList及常用API,实现栈和队列
LinkedList及常用API
① LinkedList----链表
② LinkedList类扩展AbstractSequentialList并实现List接口
③ LinkedList提供了一个链表数据结构
④ LinkedList有两个构造方法
a) LinkedList()
b) LinkedList(Collection c)
⑤ 除了继承的方法之外,LinkedList类还定义了一些有用的方法用于操作和访问容器中的数据;
a) void addFirst(E e)
b) void addLast(E e)
c) E removeFirst()
d) E removeLast()
LinkedList<String> sList = new LinkedList<String>();
sList.add("zhangsan");// 将指定元素添加到此列表的结尾
sList.add("lisi");
sList.add("wangwu");
sList.add("rose");
sList.add("mary");
sList.add("jack");
sList.addFirst("jay");// 将指定元素插入此列表的开头
sList.addLast("jhon");// 将指定元素添加到此列表的结尾
for (String name : sList) {
System.out.println(name);
} System.out.println("****************************************");
System.out.println(sList.removeFirst());//移除并返回此列表的第一个元素;如果此列表为空,NoSuchElementException
sList.clear();
System.out.println(sList.size());//返回此列表的元素数
System.out.println(sList.pollFirst());//获取并移除此列表的第一个元素;如果此列表为空,则返回 null
Linked中链表结构如下:
LinkedList中的 remove(Object)方法如下:
public boolean remove(Object o) {
if (o == null) {
for (Node<E> x = first; x != null; x = x.next) {
if (x.item == null) {
unlink(x);
return true;
}
}
} else {
for (Node<E> x = first; x != null; x = x.next) {
if (o.equals(x.item)) {
unlink(x);
return true;
}
}
}
return false;
}
再找到unlink方法
E unlink(Node<E> x) {
// assert x != null;
final E element = x.item;
final Node<E> next = x.next;
final Node<E> prev = x.prev; if (prev == null) {
first = next;
} else {
prev.next = next;
x.prev = null;
} if (next == null) {
last = prev;
} else {
next.prev = prev;
x.next = null;
} x.item = null;
size--;
modCount++;
return element;
}
从中可以看到删除时做的操作是,将要删除的元素b设为null,并且将其上一个元素a指向b的下一个元素c,将c指向a;
总结:
内部封装的是双向链表数据结构
每个节点是一个Node对象,Node对象中封装的是你要添加的元素
还有一个指向上一个Node对象的引用和指向下一个Node对象的引用
不同的容器有不同的数据结构,不同的数据结构操作起来性能是不同的
链表数据结构,做插入,删除的效率比较高,但查询效率比较低
数组结构,它做查询的效率高,因为可以通过下标直接找到元素
但插入删除效率比较低,因为要做移位操作
二:用LinkedList实现栈和队列
栈的特点,后进先出
栈的方法:
class MyStack<T>{
private LinkedList<T> data=null;
public MyStack() {
data=new LinkedList<T>();
} //压栈的方法
public void push(T obj) {
data.addFirst(obj);
} public T pop() {
return data.removeFirst();
} public Iterator<T> iterator() {
return data.iterator();
}
}
main函数中添加及使用:
MyStack<String> mystack=new MyStack<String>();
mystack.push("zhangsan");
mystack.push("lisi");
mystack.push("wangwu");
mystack.push("zhaoliu");
mystack.pop();
mystack.pop();
Iterator<String> it=mystack.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
输出结果:
lisi
zhangsan
队列的特点:先进先出
队列的方法:
class myQueue<T>{
private LinkedList<T> data=null;
public myQueue(){
data=new LinkedList<T>();
} public void push(T obj) {
data.addFirst(obj);
} public T pop() {
return data.removeLast();
} public Iterator<T> iterotor() {
return data.iterator();
}
}
main函数中添加及使用:
myQueue<Integer> myQueue=new myQueue<Integer>();
myQueue.push(1);
myQueue.push(2);
myQueue.push(3);
myQueue.push(4);
myQueue.push(5);
myQueue.pop();
myQueue.pop();
Iterator<Integer> it= myQueue.iterotor();
while (it.hasNext()) {
System.out.println(it.next());
}
输出结果:
5
4
3
List容器——LinkedList及常用API,实现栈和队列的更多相关文章
- List容器——ArrayList及常用API
List: ① List容器是有序的collection(也称为序列).此接口的用户可以对List容器中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜 ...
- Set容器——HashSet及常用API
Set容器特点: ① Set容器是一个不包含重复元素的Collection,并且最多包含一个null元素,它和List容器相反,Set容器不能保证其元素的顺序; ② 最常用的两个Set接口的实 ...
- Map容器——TreeMap及常用API,Comparator和Comparable接口
TreeMap及常用API ① TreeMap类通过使用红黑树实现Map接口; ② TreeMap提供按排序顺序存储键/值对的有效手段,同时允许快速检索; ③ 不像散列(HashMap), ...
- Set容器——TreeSet及常用API
TreeSet及常用Api ① TreeSet为使用树来进行存储的Set接口提供了一个工具,对象按升序存储,访问和检索很快; ② 在存储了大量的需要进行快速检索的排序信息的情况下,TreeSe ...
- Map容器——HashMap及常用API,及put,get方法解析,哈希码的产生和使用
Map接口 ① 映射(map)是一个存储键/值对的对象.给定一个键,可以查询到它的值,键和值都是对象; ② 键必须是唯一的,值可以重复; ③ 有些映射可以接收null键和null值,而有的 ...
- List容器-LinkedList链表
LinkedList--链表 特点: 删除,增加 用LinkedList性能高 层次查找不适合 查询用ArrayList 数组下标查找 插入和删除慢缺点是要做移位操作 总结:Link ...
- Java | 个人总结的Java常用API手册汇总
目录 常用API JavaAPI 1 java.lang String StringBuilder Integer parseXxx Math Object System Throwable Thre ...
- Java学习笔记五 常用API对象一
常用API:字符串操作:String类,StringBuffer类,StringBulider类 字符串是最重要的数据类型之一,处理字符串也是一种语言的基本工作. 1.String类: public ...
- java基础3.0:Java常用API
本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...
随机推荐
- 通过Jenkins调用自动部署war包及jar包到服务器上的Shell脚本
1)部署war包#!/bin/bashif [ id>0];then echo"stopproject" kill −9 idelse echo "project ...
- OCX和DLL的区别
转自:http://blog.csdn.net/scucj/archive/2006/06/29/852181.aspx OCX和DLL的区别 一.关于DLL的介绍 DLL,动态链接库,Dy ...
- MYSQL内置函数总结
时间转换为字符串: SELECT date_format(Date, '%Y-%m-%d %H:%i:%s' ) AS TimeFROMtable o convert函数转换为字符串的时候不存在类型为 ...
- [课堂总结]C++课堂总结(二)
近期的面向对象程序设计的不容易记忆或者理解的东西进行一个总结,以后忘记了可以常来看下,C++是个很重要的东西,很多领域都用得到,加油,特种兵! 浅拷贝构造.深拷贝构造 浅拷贝构造是系统默认的拷贝构造函 ...
- 设置DataGridView单元格的文本对齐方式
实现效果: 知识运用: DataGridViewCellStyle类的Alignment属性 //获取或设置DataGridView单元格内的单元格内容的位置 public DataGridV ...
- python_98_面向对象_学校
class School(object):#以后都加object(基类) def __init__(self, name, addr): self.name = name self.addr = ad ...
- c#和Java中的接口
使用场景: 在c#和Java中: 1.接口可以实现“多继承”(多实现),一个类只能继承自一个父类,但是可以实现多个接口. 2.接口解决了不同类型之间的多态问题,比如鱼与船不是同一类型,但是都能在水里“ ...
- JQuery EasyUI学习记录(三)
1.jQuery EasyUI messager使用方式 1.1 alert方法 $(function(){ //1.alert方法---提示框 $.messager.alert("标题&q ...
- JavaScript学习整理(转载)
JavaScript的学习整理(一) 目录: 1.换皮肤功能2.显示/隐藏(点击切换)3.显示/隐藏(onmouseover/onmouseout)4.选项卡5.全选/不选/反选(checkbox)6 ...
- CentOS 编译安装PHP5.6(7以上也通用)
由于公司有新服务器需要构建一套LNMP平台,且需要编译安装各个部件,所以记录下此文章. 这是安装PHP涉及到的软件包(可以自行决定使用哪个版本): ├── libiconv-1.15.tar.gz ├ ...