javaSE基础之 LinkedList的底层简单实现
这里贴上LinkedList底层的简单实现
package com.yck.mylinkedlist; public class Node { private Node previous; //上一结点 private Object object; //本结点所存储的东西 private Node next; //下一个结点 public Node(){} public Node(Node previous, Object object, Node next) { super(); this.previous = previous; this.object = object; this.next = next; } public Node getPrevious() { return previous; } public void setPrevious(Node previous) { this.previous = previous; } public Object getObject() { return object; } public void setObject(Object object) { this.object = object; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }
package com.yck.mylinkedlist; /** * 手动实现LinkedList底层,这次用了泛型 * @author Administrator * * @param <T> */ public class MyLinkedList<T> { private Node first; private Node last; private int size; public MyLinkedList(){} public void add(T t) { Node n =new Node(); if(first == null) { n.setPrevious(null); n.setObject(t); n.setNext(null); first = n; last = n; size++; } else { n.setPrevious(last); n.setObject(t); n.setNext(null); last.setNext(n); last = n; size++; } } public void add(int index,T t) { rangCheck(index); Node temp = new Node(); if(index == 0) { temp.setPrevious(null); temp.setObject(t); temp.setNext(first); first = temp; } else if(index != size) { temp.setPrevious(getNode(index-1)); temp.setObject(t); temp.setNext(getNode(index)); getNode(index-1).setNext(temp); getNode(index).setPrevious(temp); } else { temp.setPrevious(last); temp.setObject(t); temp.setNext(null); last = temp; } size++; } public void add(MyLinkedList<T> list) { Node temp = new Node(); temp = list.first; temp.setPrevious(this.last); this.last.setNext(temp); this.last = list.last; this.size += list.size; list.first.setPrevious(null); } public void remove(int index) { getNode(index - 1).setNext(getNode(index+1));; getNode(index).setPrevious(getNode(index -1)); size--; } public Node getNode(int index) { rangCheck(index); Node temp = new Node(); temp=first; for(int i=0;i<index;i++) { temp=temp.getNext(); } return temp; } public Object get(int index) { return getNode(index).getObject(); } public void rangCheck(int index) { if(index<0 || index>=this.size) try { throw new Exception(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { MyLinkedList<String> list = new MyLinkedList<String>(); list.add("aaa"); list.add("ooo"); list.add("xxx"); list.add("fff"); for(int i=0;i<list.size;i++) System.out.println(list.get(i)); System.out.println("****************"); list.remove(2); for(int i=0;i<list.size;i++) System.out.println(list.get(i)); System.out.println("****************"); MyLinkedList<String> list1 = new MyLinkedList<String>(); list1.add("I"); list1.add("love"); list1.add("u"); System.out.println(list1.first.getPrevious()); System.out.println("****************"); for(int i=0;i<list1.size;i++) System.out.println((String)list1.get(i)); System.out.println("****************"); list.add(list1); for(int i=0;i<list.size;i++) System.out.println((String)list.get(i)); System.out.println("****************"); } }
差点忘记贴上面简单测试的结果了
javaSE基础之 LinkedList的底层简单实现的更多相关文章
- javaSE基础之 ArrayList的底层简单实现
最近就是想扒一扒存在硬盘里面的学习资料(突然想到什么),把以前写过的一些东西整理一下分享出来. 这边是ArrayList 的简单实现,当然只实现了部分方法 package com.yck.collec ...
- javase基础回顾(二)LinkedList需要注意的知识点 阅读源码收获
我们在学习这一块内容时需要注意的一个问题是 集合中存放的依然是对象的引用而不是对象本身. List接口扩展了Collection并声明存储一系列元素的类集的特性.使用一个基于零的下标,元素可以通过它们 ...
- 基础1 JavaSe基础
JavaSe基础 1. 九种基本数据类型的大小,以及他们的封装类 boolean 无明确指定 Boolean char 16bits Character byte 8bits Byte short 1 ...
- java学习之路之javaSE基础1
<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...
- JavaSE基础:集合类
JavaSE基础:集合类 简单认识类集 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储. 而要向存储多个对象,就不能是 ...
- javaSE基础07
javaSE基础07 一.static静态修饰符 用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区) 1.1 stat ...
- javaSE基础06
javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...
- javase基础复习攻略《二》
今天就开始的真正走进JAVASE的世界,本篇介绍的是:JAVASE基础语法,大家如果有C语言的基础,对于本节内容一定感觉非常轻松,编程语言之间的都是相通的,只不过C语言属于面向过程编程,而JAVA语言 ...
- java学习之路之javaSE基础2
java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...
随机推荐
- ReactiveSwift源码解析(九) SignalProducerProtocol延展中的Start、Lift系列方法的代码实现
上篇博客我们聊完SignalProducer结构体的基本实现后,我们接下来就聊一下SignalProducerProtocol延展中的start和lift系列方法.SignalProducer结构体的 ...
- form表单提交图片禁止跳转
问题: 最近在做项目时,遇到上传图片需求,且在不跳转的情况下获取到返回信息 思路: 1. 使用ajax发送异步请求,经多次测试,最终以失败告终 2. iframe 禁止跳转(未尝试) 3. 修改fo ...
- jqthumb.js缩略图插件-让缩略图正常显示而不变形
插件介绍 项目中有图片的时候,有的宽大于高,有的宽小于高,尤其在做图片列表的时候,经常发现缩略图会有变形的.我们怎样来解决这一问题呢. 方法一:用photoshop来处理缩略图.小的项目还可以,大的项 ...
- 用letsencrypt搭建免费的https网站
环境:阿里云服务器centos7.3,nignx,letsencrypt做免费的https证书 Let’s Encrypt官网:https://letsencrypt.org/ 1.服务器开放端口:4 ...
- 自动创建win计划任务
@echo off set NAME=refrash IE set TIME=20:01:00 set DAY=MON,TUE,WED,THU,FRI,SAT,SUN set COMMAND=cscr ...
- 一次浴火重生的MySQL优化(EXPLAIN命令详解)
一直对SQL优化的技能心存无限的向往,之前面试的时候有很多面试官都会来一句,你会优化吗?我说我不太会,这时可能很多人就会有点儿说法了,比如会说不要使用通配符*去检索表.给常常使用的列建立索引.还有创建 ...
- [补档][Tyvj 1518]CPU监控
[Tyvj 1518]CPU监控 题目 Bob需要一个程序来监视CPU使用率.这是一个很繁琐的过程,为了让问题更加简单,Bob会慢慢列出今天会在用计算机时做什么事. Bob会干很多事,除了跑暴力程序看 ...
- HTML5基本知识点
一.什么是HTML HTML是超文本标签语言,即网页的源码.而浏览器就是翻译解释HTML源码的工具. 二.HTML的基本格式 <!DOCTYPE html>: ①文档类型声明:让浏览器按照 ...
- Cocoapods 应用第一部分 - Xcode 创建 .framework 相关
问题的提出: 随着项目的越来越大,可能会出现好几个团队共同维护一个项目的情况,例如:项目组A负责其中的A块,项目组B负责其中的B块.....这几块彼此之间既独立,也相互联系.对于这种情况,可以采用约定 ...
- git分支管理之创建与合并分支
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而 ...