当前位置:首页 » 操作系统 » linkedlist源码

linkedlist源码

发布时间: 2023-03-24 14:37:45

1. 如何查看JDK源码

在Eclipse中查看JDK类库的源代码方法设置:
1.点 “window”-> "Preferences" -> "java" -> "Installed JRES";
2.此时"Installed JRES"右边是列表窗格,列出了系统中的 JRE 环境,选择JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE);
3.选中rt.jar文件的这一项:“c:\program files\java\jre_1.5.0_06\lib\rt.jar”
点 左边的“+” 号展开它;
4.展开后,可以看到“Source Attachment:(none)”,点这一项,点右边的按钮“Source Attachment...”, 选择JDK目录下的 “src.zip”文件;
5.一路点"ok",结束。

dt.jar是关于运行环境的类库,主要是swing的包
tools.jar是关于一些工具的类库
rt.jar包含了jdk的基础类库,也就是在java doc里面看到的所有的类的class文件

使用方法:
可以在 Java 源代码编辑器或代码片段编辑测试窗中选择类型、方法或字段的名称,然后对元素的定义打开编辑器。
在 Java 编辑器中,选择类型、方法或字段的名称。也可以仅仅在名称中单击一次。
执行下列其中一项操作:
1.从菜单栏中,选择浏览 > 打开声明;
2.从编辑器的弹出菜单中,选择打开声明;
3.按 F3键,迁移到一个class文件拿去;
4、class文件画面会有一个“关联源代码”按钮,点击这个按钮,然后从系统文件选择jdk下的src.zip文件。
这样就可以直接看到源码了。

2. linkedlist和linklist的区别

ArrayList和LinkedList的拆信区别
1、底层数据结构的差异:

ArrayList底层是数组,是连续的内存单元
LinkedList底层是链表,是不连续的内存单元
2、数据结构引发的特征:

ArrayList 查询快,因为是连续的内存地址;增删慢,因为要发生数据迁移
LinkedList 查询慢,因为要通过链表的指针挨个寻找,增删快,因为只需要移动前后节点的指针指向即可。
3、ArrayList细节

增加 添加到末尾,数组初始容量是10,满了需要扩容,按原来容量的1.5倍进行扩容,源凯租码里是按位运算,再将原旅孙轮来的元素复制到新数组里面。

3. linkedlist 源代码怎么查找元素的

这个方法是可行的的,indexOf方法 比较的是通过equal方法比较的
如果你重写了equal方法,就使用你的规则进行比较,否则使用系统默认的方法即 Object中的equal方法;
给你贴个demo;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

public class Main{
public static void main(String[] args) {
LinkedList<Book> list = new LinkedList<>();
Book a = new Book(1,"a");
Book b = new Book(2,"b");
Book c = new Book(3,"c");
Book d = new Book(4,"d");
list.add(a);
list.add(b);
list.add(c);
list.add(d);

int index = list.indexOf(new Book(4, "d"));
System.out.println(index);

}
}
class Book{
int id;
String name;
public Book(int id,String name){
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object obj) {
Book book = (Book) obj;
if(book!=null){
if((book.id == this.id) && (book.name.equals(this.name)))
return true;
}
return false;
}

4. java 中的LinkedList 是双向循环列表吗

源代码中:
public void addLast(E e) {
addBefore(e, header);
}
将指定元素添加到此列表的结尾
public boolean add(E e) {
addBefore(e, header);
return true;
}
所以,add是向列表尾加的

看了一下addBefore方法
应该是双链表结构 不是循环双链表

5. ArrayList和LinkedList中的transient关键字和序列化

在看ArrayList和LinkedList的 源码 的时候,发现ArrayList和LinkedList的一些成员变量变量被transient修饰了,有点不解,就查了一些资料。分享给大家。

序列化是java提供的一种将内存中的对象信息转化为二进制数组的方法,可以将数组保存和传输,然后使用原来的类模板恢复对象的信息。源颂贺
转化后的二进制数组中包含以下信息:序列化版本,完整类名,serialVersionUID,各个属性的类型、名字和值、父类信息。

实现Serializable接口,使用ObjectOutputStream.writeObject(Object Object)写对象信息,使用ObjectInputStream.readObject()读对象信息。

ObjectOutputStream.writeObject(ObjectA objectA)首先判断ObjectA有没有重写writeObject方法,如果有,反射调用ObjectA的writeObject方法完成序列化;否则,调用默认的序列化方法序列化。反序列化也一样

被transient修饰的成员变量不会被序列化。
哪些情况下可以不用序列化呢?我认为有以下两种情况。
1.节省空间
比如,一个长方形类有成员变量:长、宽、面积。那么面积就不用序列化,因为面积可以根据其他两个计算出来,这样节省存储空间和传输空间。
2.持有对象的引用
比如,我们创建链表的结点如下。结点中持有前驱结点和后继结点的引用,引用就是对象在内存中的地址值。对于这样的结点形成的链表,我们序列化这个链表后,结点的前序和后继引用都失效了,因为内存地址变了。这种情况下我们需要重新连接链表。

首先说以下结论:
1.ArrayList中将elementData修饰成transient是为了节省空间
2.LinkedList中将first和last修饰成transient是为了节省空间和重新连接链表。

查看 源码 我们知道ArrayList中使用数组transient Object[] elementData保存数据,当数组空间不够时,数组长度扩容为原来的1.5倍。那么数组中可能有没有使用的空间,比如elementData的长度时15,但是里面只装了11个元素,那么后面的4个元素都是空值。序列化的时候可以不把这4个元素序列化。
ArrayList中定义了writeObject和readObject方法,实现了自定义序列化。前面我们说了序列化的时候ObjectStream会判断类中有没有自定义序列化方法?如果有,使用自定义序列化方法:否则使用默认的序列化方法。
ArrayList自定义序列化方法如下

查看 源码 我们知道LinkedList中使用双向链表樱培保存数据,结点中保存前驱和后继的引用。但是序列化之后前序结点和后继结点的地址都变了,我们应该连接新的结点。
下面看以下LinkedList是怎么自定义序列化的

我们看到了,LinkedList序列化的时候将链表按顺序拆分开来,仅序列化结雹派点中保存的数据,反序列化的时候重新连接链表,保证了链表的有效性。

6. java中链表是指java.util包中的LinkedList类吗

链表指的是一种数据存储结构,java.util.LinkedList是JAVA自己实现的一个双向链表,自定义链表的话可以参考LinkedList类的源码

7. LinkedList的null元素

LinkedList 允许null的存在,因此在刷题用 linkedList 模拟队列的的时候,可以利用这个漏洞祥弊;

但是,原则上队列并不允许null,其他时候不应该放null进来。

查看JDK源码(JDK11):

LinkedList 的节点包含item 和 指向前后节点的“指针”谨扮族,因此null只是让节点的值变缺雹成null,next和prev还是有值的。

8. java中linklist.size()是什么意思

list的包含元素的个数,长度~
ArrayList alist = new ArrayList();
alist.add("111");
alist.add("222"指悔);
alist.add("333");
System.out.println(alist.size());
以上输出结果为唯槐正3,因为向该变量中共添加了3个明冲元素。

9. Java中的linkedlist有两个方法,element()和getFirst(),有什么不一样

这种最好的就是看jdk源码和源码上的注释,以及编写测试代码实际调用测试一下。

看jdk源码,LinkedList<E>源码

先看getFirst()

/**
*.
*
*@
*@
*/
publicEgetFirst(){
finalNode<E>f=first;
if(f==null)
();
returnf.item;
}

看注释Returns the first element in this list,返回列表的第一个元素,没毛病。

然后来看element()

/**
*Retrieves,butdoesnotremove,thehead(firstelement)ofthislist.
*
*@returntheheadofthislist
*@
*@since1.5
*/
publicEelement(){
returngetFirst();
}

结果…… LinkedList 里面 element()就是直接调用的getFirst()方法

10. 如何实现Java中一个简单的LinkedList

与实现ArrayList的名字一样,为SimpleLinkedList。源码地址,欢迎star,fork
构建一个双向绝拿敬敏纳链表
构建的代码如下:
?

1
2
3
4
5
6
7
8
9
10

private static class Node<E>{
E item;
Node<E> next;
Node<E> prev;
public Node(E item, Node<并慎E> next, Node<E> prev) {
this.item = item;
this.next = next;
this.prev = prev;
}
}

常规的双向链表的构建方法,一个数字域存放数组,一个前指针指向一个Node类型的元素,一个后指针指向一个Node类型的元素。
对于LinkedList的实现而言,还需要以下三个成员变量
?

热点内容
对一个新编程 发布:2024-05-02 21:20:07 浏览:559
华为系统编译器在哪里 发布:2024-05-02 21:19:50 浏览:86
ebsco数据库检索 发布:2024-05-02 21:18:51 浏览:82
python递归创建目录 发布:2024-05-02 21:02:38 浏览:280
数据库分离与附加 发布:2024-05-02 20:56:59 浏览:40
搭建我的世界java服务器详细篇 发布:2024-05-02 20:56:59 浏览:942
string函数java 发布:2024-05-02 20:36:49 浏览:801
phplinux服务器 发布:2024-05-02 20:30:23 浏览:754
安卓在哪里安装网易官方手游 发布:2024-05-02 20:15:07 浏览:409
qq宠物的文件夹 发布:2024-05-02 20:13:46 浏览:366