内功心法 -- java.util.LinkedList<E> (5)
写在前面的话:读书破万卷,编码如有神
--------------------------------------------------------------------
下文主要对java.util.LinkedList<E>的4个查询操作进行介绍,主要内容包括:
1、LinkedList常用4个查询操作介绍
参考内容:
1、JDK源码(1.7)
--------------------------------------------------------------------
1、LinkedList常用4个查询操作介绍
(1) int indexOf(Object o)
功能: 查询元素o在此双端队列中的位置(如果不存在则返回-1)
示例代码:
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
/*********测试LinkedList的'int indexOf(Object o)'方法的使用**********/
//创建一个LinkedList对象
LinkedList<Student> linkedList = new LinkedList<Student>();
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu1 = new Student(1,"zhangsan",20);
linkedList.add(stu1);
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu2 = new Student(2,"lisi",21);
linkedList.add(stu2);
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu3 = new Student(3,"wangwu",22);
linkedList.add(stu3);
System.out.println("linkedList:" + linkedList);
System.out.println("linkedList.indexOf(stu2):" + linkedList.indexOf(stu2));
Student stu4 = new Student(4,"erha",22);
System.out.println("linkedList.indexOf(stu4):" + linkedList.indexOf(stu4));
}
}
运行结果:
linkedList:[Student [stuId=1, stuName=zhangsan, stuAge=20], Student [stuId=2, stuName=lisi, stuAge=21], Student [stuId=3, stuName=wangwu, stuAge=22]]
linkedList.indexOf(stu2):1
linkedList.indexOf(stu4):-1
源代码如下:
/*
查询元素o在此双端队列中的位置(如果不存在,则返回-1)
*/
public int indexOf(Object o) {
int index = 0;
if (o == null) {
//当元素o为null时
//循环遍历此双端队列中的每个元素,查找是否有元素为null
for (Node<E> x = first; x != null; x = x.next) {
if (x.item == null)
return index;
index++;
}
} else {
//当元素o不为null时
//循环遍历此双端队列中的每个元素,查找是否有元素的值等于o
for (Node<E> x = first; x != null; x = x.next) {
if (o.equals(x.item))
return index;
index++;
}
}
return -1;
}
(2) int lastIndexOf(Object o)
功能: 查询元素o在此双端队列中最后一次出现的位置(如果不存在则返回-1)
示例代码:
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
/*********测试LinkedList的'int lastIndexOf(Object o)'方法的使用**********/
//创建一个LinkedList对象
LinkedList<Student> linkedList = new LinkedList<Student>();
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu1 = new Student(1,"zhangsan",20);
linkedList.add(stu1);
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu2 = new Student(2,"lisi",21);
linkedList.add(stu2);
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu3 = new Student(3,"wangwu",22);
linkedList.add(stu3);
linkedList.add(stu2);
linkedList.add(stu3);
System.out.println("linkedList:" + linkedList);
System.out.println("linkedList.lastIndexOf(stu2):" + linkedList.lastIndexOf(stu2));
Student stu4 = new Student(4,"erha",22);
System.out.println("linkedList.lastIndexOf(stu4):" + linkedList.lastIndexOf(stu4));
}
}
运行结果:
linkedList:[Student [stuId=1, stuName=zhangsan, stuAge=20], Student [stuId=2, stuName=lisi, stuAge=21], Student [stuId=3, stuName=wangwu, stuAge=22], Student [stuId=2, stuName=lisi, stuAge=21], Student [stuId=3, stuName=wangwu, stuAge=22]]
linkedList.lastIndexOf(stu2):3
linkedList.lastIndexOf(stu4):-1
源代码如下:
/*
查询元素o在此双端队列中最后一次出现的位置(如果不存在,则返回-1)
*/
public int lastIndexOf(Object o) {
int index = size;
if (o == null) {
//当元素o为null时
//循环逆序遍历双端队列中每个节点元素,查询节点元素值为null的节点
for (Node<E> x = last; x != null; x = x.prev) {
index--;
if (x.item == null)
return index;
}
} else {
//当元素o为null时
//循环逆序遍历双端队列中每个节点元素,查询节点元素值等于元素o的节点
for (Node<E> x = last; x != null; x = x.prev) {
index--;
if (o.equals(x.item))
return index;
}
}
return -1;
}
(3) boolean contains(Object o)
功能: 查询此双端队列中是否有元素o
示例代码:
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
/*********测试LinkedList的'boolean contains(Object o)'方法的使用**********/
//创建一个LinkedList对象
LinkedList<Student> linkedList = new LinkedList<Student>();
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu1 = new Student(1,"zhangsan",20);
linkedList.add(stu1);
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu2 = new Student(2,"lisi",21);
linkedList.add(stu2);
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu3 = new Student(3,"wangwu",22);
linkedList.add(stu3);
linkedList.add(stu2);
linkedList.add(stu3);
System.out.println("linkedList:" + linkedList);
System.out.println("linkedList.contains(stu2):" + linkedList.contains(stu2));
Student stu4 = new Student(4,"erha",22);
System.out.println("linkedList.contains(stu4):" + linkedList.contains(stu4));
}
}
运行结果:
linkedList:[Student [stuId=1, stuName=zhangsan, stuAge=20], Student [stuId=2, stuName=lisi, stuAge=21], Student [stuId=3, stuName=wangwu, stuAge=22], Student [stuId=2, stuName=lisi, stuAge=21], Student [stuId=3, stuName=wangwu, stuAge=22]]
linkedList.contains(stu2):true
linkedList.contains(stu4):false
源代码如下:
public boolean contains(Object o) {
//调用indexOf方法返回元素o在此双端队列中的位置
return indexOf(o) != -1;
}
(4) int size()
功能: 返回此双端队列中元素的个数
示例代码:
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
/*********测试LinkedList的'int size()'方法的使用**********/
//创建一个LinkedList对象
LinkedList<Student> linkedList = new LinkedList<Student>();
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu1 = new Student(1,"zhangsan",20);
linkedList.add(stu1);
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu2 = new Student(2,"lisi",21);
linkedList.add(stu2);
//创建一个Student对象,并将其添加到LinkedList对象中
Student stu3 = new Student(3,"wangwu",22);
linkedList.add(stu3);
linkedList.add(stu2);
linkedList.add(stu3);
System.out.println("linkedList:" + linkedList);
System.out.println("linkedList.size():" + linkedList.size());
}
}
运行结果:
linkedList:[Student [stuId=1, stuName=zhangsan, stuAge=20], Student [stuId=2, stuName=lisi, stuAge=21], Student [stuId=3, stuName=wangwu, stuAge=22], Student [stuId=2, stuName=lisi, stuAge=21], Student [stuId=3, stuName=wangwu, stuAge=22]]
linkedList.size():5
源代码如下:
public int size() {
//返回属性size
return size;
}
--------------------------------------------------------------------
java.util.LinkedList<E>系列文章
java.util.LinkedList<E>(1) java.util.LinkedList<E>(2) java.util.LinkedList<E>(3)
java.util.LinkedList<E>(4) java.util.LinkedList<E>(5) java.util.LinkedList<E>(6)
java.util.LinkedList<E>(7) java.util.LinkedList<E>(8)
--------------------------------------------------------------------
相关知识
java.util.Collection<E> java.util.AbstractCollection<E> java.util.List<E>
java.util.AbstractList<E> java.util.Iterator<E> java.util.ListIterator<E>
Java中的标记接口 迭代器模式 Java中的深拷贝和浅拷贝 java.util.Arrays
java.util.Queue<E> java.util.Deque<E>
内功心法 -- java.util.LinkedList<E> (5)的更多相关文章
- 内功心法 -- java.util.LinkedList<E> (3)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (4)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (6)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (7)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (8)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (1)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (2)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- java.util.ArrayList、java.util.vector和java.util.LinkedList (JDK 1.8.0_111)
一.java.util.ArrayList 1.1 ArrayList 继承结构 ArrayList实现了RandomAccess,可以随机访问(其实就是通过数组下标访问):实现了Cloneable, ...
- JDK1.8源码(六)——java.util.LinkedList 类
上一篇博客我们介绍了List集合的一种典型实现 ArrayList,我们知道 ArrayList 是由数组构成的,本篇博客我们介绍 List 集合的另一种典型实现 LinkedList,这是一个有链表 ...
随机推荐
- 避免无用的渲染绘制(Avoiding Unnecessary Paints)
本文翻译自html5rock上的文章,文章英文原版地址在最后给出. 文中的Paints我翻译成渲染绘制,我自己是这么理解. 开始 绘制(渲染)一个网站或者一个应用的元素对浏览器来说开销是很大的,它会对 ...
- css 格式中id与class共存
PHP文件中有一段:<div class="post-alt blog" id="post-alt"> CSS文件中有一段:.post-alt {X ...
- 在wamp下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持
1.安装WAMPServer 根据自己的操作系统选择相应的WAMP版本,我这里选择WAMPSERVER-32 BITS & PHP 5.5-2.5, 双击安装,选择安装目录即可,超级简单.根据 ...
- 生产环境手把手部署ERC20智能合约
工具 rimex http://remix.ethereum.org/ metamask https://metamask.io/ ERC20 代码 https://github.com/OpenZe ...
- 5-python的封装与结构 - set集合
目录 1 封装与解构 1.1 封装 1.2 解构 1.3 Python3的解构 2 set类型 2.1 set的定义 2.2 set的基本操作 2.2.1 增加元素 2.2.2 删除元素 2.2.3 ...
- python设计模式之装饰器详解(三)
python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...
- 牛B的日本精神
在汤森路透评选出的<2015全球创新企业百强>榜单里,日本以40家高居榜首,力压美国的35家.而中国内地无一入围. 在中国媒体上,我们见到的日本是“失去的20年”,经济衰退.创新能力丧 ...
- 64_n1
NFStest-2.1.5-0.fc26.noarch.rpm 16-Feb-2017 16:19 544018 NLopt-2.4.2-11.fc26.i686.rpm 13-Feb-2017 23 ...
- java中8种数据类型和默认值所占字节数
java 8种基本数据类型的默认值及所占字节数 通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge; 2 3 public class Ceshi { 4 int a; ...
- Deep Learning基础--word2vec 中的数学原理详解
word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了很多人的关注.由于 word2vec 的作者 Tomas Miko ...