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,实现栈和队列的更多相关文章

  1. List容器——ArrayList及常用API

    List: ①   List容器是有序的collection(也称为序列).此接口的用户可以对List容器中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜 ...

  2. Set容器——HashSet及常用API

    Set容器特点: ①   Set容器是一个不包含重复元素的Collection,并且最多包含一个null元素,它和List容器相反,Set容器不能保证其元素的顺序; ②   最常用的两个Set接口的实 ...

  3. Map容器——TreeMap及常用API,Comparator和Comparable接口

    TreeMap及常用API ①   TreeMap类通过使用红黑树实现Map接口; ②   TreeMap提供按排序顺序存储键/值对的有效手段,同时允许快速检索; ③   不像散列(HashMap), ...

  4. Set容器——TreeSet及常用API

    TreeSet及常用Api ①   TreeSet为使用树来进行存储的Set接口提供了一个工具,对象按升序存储,访问和检索很快; ②   在存储了大量的需要进行快速检索的排序信息的情况下,TreeSe ...

  5. Map容器——HashMap及常用API,及put,get方法解析,哈希码的产生和使用

    Map接口 ①   映射(map)是一个存储键/值对的对象.给定一个键,可以查询到它的值,键和值都是对象; ②   键必须是唯一的,值可以重复; ③   有些映射可以接收null键和null值,而有的 ...

  6. List容器-LinkedList链表

    LinkedList--链表 特点: 删除,增加 用LinkedList性能高  层次查找不适合       查询用ArrayList  数组下标查找  插入和删除慢缺点是要做移位操作 总结:Link ...

  7. Java | 个人总结的Java常用API手册汇总

    目录 常用API JavaAPI 1 java.lang String StringBuilder Integer parseXxx Math Object System Throwable Thre ...

  8. Java学习笔记五 常用API对象一

    常用API:字符串操作:String类,StringBuffer类,StringBulider类 字符串是最重要的数据类型之一,处理字符串也是一种语言的基本工作. 1.String类: public ...

  9. java基础3.0:Java常用API

    本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...

随机推荐

  1. Python之查询最新的文件

    import os # 定义文件的目录 result_dir = r'E:\python\测试报告' lists = os.listdir(result_dir) # 重新按时间对目录下的文件进行排序 ...

  2. 参考消息 Android 读报

    <参考消息>是新华通讯社主办,参考消息报社编辑出版的日报,创刊于1931年,历史长达80年.<参考消息>每天及时选载世界各国(地区)通讯社.报刊及因特网上的最新消息.评论的精华 ...

  3. php循环a-z字母表

    ord — 返回字符的 ASCII 码值 说明 int ord ( string $string ) 返回字符串 string 第一个字符的 ASCII 码值.  该函数是 chr() 的互补函数. ...

  4. C++类和结构体的区别

    C++类和结构体的区别? 结构体默认数据访问控制是public; 类默认数据访问控制是private;

  5. Python SciPy Sparse模块学习笔记

    1. sparse模块的官方document地址:http://docs.scipy.org/doc/scipy/reference/sparse.html   2. sparse matrix的存储 ...

  6. ssh整合思想 Spring与Hibernate的整合ssh整合相关JAR包下载 .MySQLDialect方言解决无法服务器启动自动update创建表问题

    除之前的Spring相关包,还有structs2包外,还需要Hibernate的相关包 首先,Spring整合其他持久化层框架的JAR包 spring-orm-4.2.4.RELEASE.jar  ( ...

  7. JavaScript Dom编程艺术(1)

    Dom是一种可以供多种环境和多种程序设计语言使用的API: 一份文档就是一个节点树: 节电分为不同的类型:元素节点,属性节点,文档节点,元素节点分为属性节点和文档节点: getelementbyid( ...

  8. C++函数的默认参数补充

    1.函数定义时指定默认参数 在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值.也就是说,调用函数时可以省略有默认值的参数 ...

  9. Voyager的Roles和Pemissions

    以Page为例讲解: 取消admin的roles下Pages的Browse Pages权限: 打开web.php文件,添加: Route::get('pages', function(){ retur ...

  10. vue_music:封装scroll.vue组件

    在项目中经常用到滚动,结合Better-scroll封装了sroll.vue组件参考链接:https://ustbhuangyi.github.io...http://www.imooc.com/ar ...