我的集合学习笔记--LinkedList
一,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的更多相关文章
- Java集合学习笔记
在Java中,我们经常听到Collections框架.Collection类以及Collections类.这三者名字相似,但是从概念上讲却是不同的.Collections框架泛指Java中用于存储 ...
- java 集合学习笔记
1.Collection(单列结合) List(有序,数据可重复) ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高. Vector:底层数据结构是数组,查询快,增删慢,线程 ...
- JDK源码学习笔记——LinkedList
一.类定义 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E& ...
- python --->字典 集合 学习笔记
1.字典--->创建空字典:dict={} broa=["李宁",”耐克“,“阿迪达斯”,“鱼c工作室”] sloga=[“A”,“B”,“C”,“D”] dict={&qu ...
- python之 集合 学习笔记
""" 集合内的元素是无序的,集合内的元素必须是可哈希的集合内元素的唯一的,不存在重复列表和字典不能存在集合里面,因为列表字典可变 可哈希集合也是不可哈希的 unhash ...
- 我的集合学习笔记--ArrayList
一,ArrayList 实现自己的ArrayList:主要是添加方法,理解自动扩容机制 代码+注释 package com.amazing.jdk.learn2List.list_08_13; /** ...
- [Java] LinkedList / Queue - 源代码学习笔记
简单地画了下 LinkedList 的继承关系,如下图.只是画了关注的部分,并不是完整的关系图.本博文涉及的是 Queue, Deque, LinkedList 的源代码阅读笔记.关于 List 接口 ...
- Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)
横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点: ...
- JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue
前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...
随机推荐
- mysql列的处理
MySQL 添加列,修改列,删除列 示例:ALTER TABLE tb_financial MODIFY CREATE_TIME DATETIME(3) DEFAULT NULL COMMENT '录 ...
- Java中集合删除元素时候关于ConcurrentModificationException的迷惑点
下面的示例来至于阿里巴巴Java开发手册的集合处理部分的第7条: 运行如下代码,会发现正确运行. public static void hasNotExcption() { List<Strin ...
- Android Studio 运行找不到夜神模拟器
夜神模拟器开着,Android studio 找不到模拟器 解决方法:1.进入CMD,转到夜神安装目录 cd D:\Program Files (x86)\Nox\bin 2.执行命令:nox_adb ...
- mysql函数之截取字符串
文章摘取自http://www.cnblogs.com/zdz8207/p/3765073.html 练习截取字符串函数(五个) mysql索引从1开始 一.mysql截取字符串函数 1.left(s ...
- centos时区设置
[root@ logs]# tzselect Please identify a location so that time zone rules can be set correctly.Pleas ...
- sql截取日期/时间的单独部分,比如年、月、日、小时、分钟等等
可以使用EXTRACT() 函数.(oracle和mysql都有该函数) 语法: EXTRACT(unit FROM date) date 参数是合法的日期表达式.unit 参数可以是下列的值:YEA ...
- 201904Online Human Action Recognition Based on Incremental Learning of Weighted Covariance Descriptors
论文标题:Online Human Action Recognition Based on Incremental Learning of Weighted Covariance Descriptor ...
- pacman详解及常见问题
安装软件包:软件包有很多可选依赖,是为软件提供额外功能, 安装软件时pacman 会输出可选依赖, 但不会在 pacman.log中,浏览安装软件的可选以来可用pacman -Si得到可选依赖的简短描 ...
- ASP.NET Newtonsoft 序列化反序列化
1.NuGet 安装 Newtonsoft 2.调用方法 一 NuGet 安装 Newtonsoft 二 调用方法 Student stu = new Student(); stu.ID = &quo ...
- java 面向对象基本知识
1.继承 使用extends实现继承 只有单继承 子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法). instanceof是二元 ...