我的集合学习笔记--LinkedList

时间:2022-05-12 22:48:20

一,Node节点:

/**
* 存储元素基本单位
*/
public class Node {
Object data;
Node pre;
Node next; public Node(Node pre, Object data, Node next) {
this.data = data;
this.pre = pre;
this.next = next;
}
}

二.自己实现一个链表

public class MyLinkedList {
private Node first;
private Node last;
private int size;
public boolean isEmpty(){
return size==0;
}
public int size(){
return size;
}
public boolean addBy(Object data){
Node l=last;
Node entry=new Node(l,data,null);
last=entry;
if(l==null){
first=entry;
}else {
l.next=entry;
}
size++;
return true;
} /**
* 根据下标获取Node元素
* 采用了二分查找法
* @param index
* @return
*/
private Node node(int index){
if(index<(size>>1)){
//下标在前半段,从前往后查
Node current=first;
for(int i=0;i<index;i++){
current=current.next;
}
return current;
}else {
//下标在后半段,从后往前查
Node current=last;
for (int i=size-1;i>index;i--){
current=current.pre;
}
return current;
}
} /**
* 判断下标是否越界
* @param index
*/
private void checkRange(int index){
if(index>=size||index<0){
throw new IndexOutOfBoundsException("下标越界");
}
} /**
* 根据下标获取元素
* @param index
* @return
*/
public Object get(int index){
checkRange(index);
return node(index).data;
}
private Object deleteNode(int index){
Node node=node(index);
Object data=node.data;
Node preNode=node.pre;
Node nextNode=node.next;
if(preNode==null){
//删除了第一个元素
first=nextNode;
}else {
preNode.next=nextNode;
node.next=null;
}
if(nextNode==null){
//删除了最后一个元素
last=preNode;
}else {
nextNode.pre=preNode;
node.pre=null;
}
size--;
node.data=null;
return data;
}
public Object remove(int index){
checkRange(index);
return deleteNode(index);
}
private void addBefore(Object data,Node specificNode){
Node preNode=specificNode.pre;
Node newNode=new Node(preNode,data,specificNode);
if(preNode==null) {
first=newNode;
}else {
preNode.next=newNode;
}
specificNode.pre=newNode;
size++;
}
public void add(int index,Object data){
checkRange(index);
if(index==size){
addBy(data);
}else {
Node node=node(index);
addBefore(data,node);
}
} }

我的集合学习笔记--LinkedList的更多相关文章

  1. Java集合学习笔记

      在Java中,我们经常听到Collections框架.Collection类以及Collections类.这三者名字相似,但是从概念上讲却是不同的.Collections框架泛指Java中用于存储 ...

  2. java 集合学习笔记

    1.Collection(单列结合) List(有序,数据可重复) ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高. Vector:底层数据结构是数组,查询快,增删慢,线程 ...

  3. JDK源码学习笔记——LinkedList

    一.类定义 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E& ...

  4. python ---&gt&semi;字典 集合 学习笔记

    1.字典--->创建空字典:dict={} broa=["李宁",”耐克“,“阿迪达斯”,“鱼c工作室”] sloga=[“A”,“B”,“C”,“D”] dict={&qu ...

  5. python之 集合 学习笔记

    """ 集合内的元素是无序的,集合内的元素必须是可哈希的集合内元素的唯一的,不存在重复列表和字典不能存在集合里面,因为列表字典可变 可哈希集合也是不可哈希的 unhash ...

  6. 我的集合学习笔记--ArrayList

    一,ArrayList 实现自己的ArrayList:主要是添加方法,理解自动扩容机制 代码+注释 package com.amazing.jdk.learn2List.list_08_13; /** ...

  7. &lbrack;Java&rsqb; LinkedList &sol; Queue - 源代码学习笔记

    简单地画了下 LinkedList 的继承关系,如下图.只是画了关注的部分,并不是完整的关系图.本博文涉及的是 Queue, Deque, LinkedList 的源代码阅读笔记.关于 List 接口 ...

  8. Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)

    横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点: ...

  9. JavaSE中Collection集合框架学习笔记&lpar;2&rpar;——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

随机推荐

  1. 初学Spring有没有适合的书

    初学者之前没有阅读java框架源码的习惯.没有阅读过源码,知道整体流程么?知道依赖注入的概念么?知道aop么?知道其中用到了哪些设计模式么?再说了,如果一上手就是源码?难道你没有注意到Spring的类 ...

  2. &lbrack;转&rsqb;C&num;网络编程&lpar;订立协议和发送文件&rpar; - Part&period;4

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part4.aspx 源码下载:http://www.trac ...

  3. 错误 是否保存对以下各项的更改 devenv&period;sin

    描述: 打开VS2012项目时,提示 是否保存对以下各项的更改 devenv.sin google了一下,没找到...纠结.百度了一下,竟然有的...擦一直以为google很给力,看来对于中文的解析不 ...

  4. ios本地文件内容读取,&period;json &period;plist 文件读写

    ios本地文件内容读取,.json .plist 文件读写 本地文件.json .plist文件是较为常用的存储本地数据的文件,对这些文件的操作也是一种常用的基础. 本文同时提供初始化变量的比较标准的 ...

  5. ASP&period;NET jQuery 随笔 使用jQuery UI的Autocomplete方法实现文本框的自动搜索填充功能

    首先当然是去下载JQuery UI ,这里这里是下载地址http://jqueryui.com/ 第一步是点击这里 第二步选择你想要下载的主题进行下载 我这里是选择的cupertino主题包 点击圆圈 ...

  6. webpack打包处理html、css、js、img、scss文件

    webpack --help 查看webpack命令启动服务 npm run dev (先配置好服务)进入对应文件夹并初始化npmcd demo npm init 安装webpack npm inst ...

  7. 大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt388 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与 ...

  8. spring之AspectJ基于注解 AOP编程

    一.前言 使用注解代替之前在spring配置文件中配置目标类.切面类和aop配置. 二.注意 需要注意的是,需要在spring配置文件中引入如下,如果不添加,切面类中的@Aspect注解将不起作用 & ...

  9. Hive在集群环境配置

    本文转载自:https://blog.csdn.net/hanjin7278/article/details/53035739 一.简介 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数 ...

  10. maven 无法下载私服jar包,如刚上传的第三方jar包无法下载。。

    原因可能是: 在你下载该文件时 ,的确 私服上没有该文件. 但是maven会在本地仓库建立文件夹路径,并且今天不会再去私服下载. 即使你现在上传3rd jar ,也不会去下载,导致一直找不到jar.. ...