# Java自学笔记--链表（超全面解析）

## 二、链表

### 2、链表的初步理解

public class Monkey
{
public int id;//编号
public String name;//名字
public Monkey next//后面的猴子，为null的话表示后面没猴子了
}

public class Test
{
public static void main(String[] args)
{
//创造四只猴子
Monkey m1 =  new Monkey(100,"圆圆");
Monkey m2 =  new Monkey(101,"芳芳");
Monkey m3 =  new Monkey(103,"角角");
Monkey m4 =  new Monkey(104,"朱朱");
//将猴子的尾巴连起来
m1.next = m2;
m2.next = m3;
m3.next = m4;
m4.next = null;
}
}



### 3、链表的遍历

public class Test
{
public static void main(String[] args)
{
//创造四只猴子
Monkey m1 =  new Monkey(100,"圆圆");
Monkey m2 =  new Monkey(101,"芳芳");
Monkey m3 =  new Monkey(103,"角角");
Monkey m4 =  new Monkey(104,"朱朱");
//将猴子的尾巴连起来
m1.next = m2;
m2.next = m3;
m3.next = m4;
m4.next = null;
//遍历
Monkey node = m1;
while( nodee !=null)
{
System.out.println("链表中的节点" + node);
node = node.next;
}
}
}



## 三、插入和删除节点

### 1、插入节点

#### 方式一：附加到末尾

public class Test
{
public static void main(String[] args)
{
//创造四只猴子
Monkey m1 =  new Monkey(100,"圆圆");
Monkey m2 =  new Monkey(101,"芳芳");
Monkey m3 =  new Monkey(103,"角角");
Monkey m4 =  new Monkey(104,"朱朱");

//将猴子的尾巴连起来
m1.next = m2;
m2.next = m3;
m3.next = m4;
m4.next = null;
//创建新的猴子
Monkey m5 =  new Monkey(105,"花花");
//找到尾节点
Monkey tail = m1;
while(true)
{
if(tail.next==null)break;
else tail=tail.next;
}
tail.next=m5;
//遍历
Monkey node = m1;
while( nodee !=null)
{
System.out.println("链表中的节点" + node);
node = node.next;
}
}
}


#### 方式二：插入到中间位置

public class Test
{
public static void main(String[] args)
{
//创造四只猴子
Monkey m1 =  new Monkey(100,"圆圆");
Monkey m2 =  new Monkey(101,"芳芳");
Monkey m3 =  new Monkey(103,"角角");
Monkey m4 =  new Monkey(104,"朱朱");

//将猴子的尾巴连起来
m1.next = m2;
m2.next = m3;
m3.next = m4;
m4.next = null;
//创建新的猴子
Monkey m5 =  new Monkey(105,"花花");
//找到头结点
m5.next=m1.next;//原来m1后面的猴子抓住m5的尾巴
m1.next=m5;//m5抓住m1的尾巴
//遍历
Monkey node = m1;
while( nodee !=null)
{
System.out.println("链表中的节点" + node);
node = node.next;
}
}
}

##### 方式三：插入到指定位置

public class Test
{
public static void main(String[] args)
{
//创造四只猴子
Monkey m1 =  new Monkey(100,"圆圆");
Monkey m2 =  new Monkey(101,"芳芳");
Monkey m3 =  new Monkey(103,"角角");
Monkey m4 =  new Monkey(104,"朱朱");

//将猴子的尾巴连起来
m1.next = m2;
m2.next = m3;
m3.next = m4;
m4.next = null;
//创建新的猴子
Monkey m5 =  new Monkey(105,"花花");
//找到对应节点
Monkey node = m1;
while(node!=null)
{
if(node.id=102)
{
m5.next=node.next;
node.next=m5;
break;
}
else
{
node=node.next;
}
}

//遍历
Monkey node = m1;
while( nodee !=null)
{
System.out.println("链表中的节点" + node);
node = node.next;
}
}
}


## 五、数组链表ArrayList

### 1、ArrayList的简单使用

ArrayList是一个容器，它可以存储任何对象（我们只需要知道如何使用即可，不需要关心其内部的实现）

ArrayList相当于动态数组
ArrayList a = new ArrayList();

（2）删除对象remove: a.remove(想要删除的对象的位置)
（3）遍历像数组一样按照索引遍历

for(int i=0;i<a.size();i++)
{
Student s =(Student)a.get(i)//需要将a的对象类型转换为对应的类型
System.out.println("遍历得："+s);
}


### 2、ArrayList的详细介绍

#### (一)ArrayList的添加方法

(1)按照顺序向ArrayList中添加数据

package ArrayList;

import java.util.ArrayList;

public class ArrayListTest
{

public static void main(String[] args)
{
ArrayList list = new ArrayList();
System.out.println ("按照顺序添加 "+list);

}
}



(2)在第N个数据后面添加一个数据

package ArrayList;

import java.util.ArrayList;

public class ArrayListTest
{

public static void main(String[] args)
{
ArrayList list = new ArrayList();
System.out.println ("按照顺序添加 "+list);
}

}



(3)将一个ArrayList中的所有数据添加到另外一个ArraList中

package ArrayList;

import java.util.ArrayList;

public class ArrayListTest
{

public static void main(String[] args)
{
ArrayList list1 = new ArrayList();
ArrayList list2 = new ArrayList();
System.out.println ("将list2的内容全部加到list1中"+list1);

}

}



(4)将一个ArrayList中的所有数据添加到另外一个ArraList中的第N个元素之后。

package ArrayList;

import java.util.ArrayList;

public class ArrayListTest
{

public static void main(String[] args)
{
ArrayList list1 = new ArrayList();
ArrayList list2 = new ArrayList();
System.out.println ("将list2中的全部数据添加到list1中的第2个元素之后:"+list1);

}

}


#### (二)ArrayList的删除方法

(1)按照位置删除单个数据

package ArrayList;

import java.util.ArrayList;

public class ArrayListTest
{

public static void main(String[] args)
{
ArrayList list = new ArrayList();

list.remove(0);

System.out.println ("将list中第1个数据删除:"+list);
}

}



(二)按照内容删除单个数据

package ArrayList;

import java.util.ArrayList;

public class ArrayListTest
{

public static void main(String[] args)
{
ArrayList list = new ArrayList();

list.remove("a");
System.out.println ("将list中的a:"+list);
}

}


(三)清空ArrayList

package ArrayList;

import java.util.ArrayList;

public class ArrayListTest
{

public static void main(String[] args)
{
ArrayList list = new ArrayList();

list.clear();
System.out.println ("将list中的a:"+list);
}

}



### (三)ArrayList的修改方法

package ArrayList;

import java.util.ArrayList;

public class ArrayListTest
{

public static void main(String[] args)
{
ArrayList list = new ArrayList();

list.set(0, "我被修改了！！！");
System.out.println ("将list中第1个元素修改:"+list);
}

}


### （四）ArrayList的查询方法

package ArrayList;

import java.util.ArrayList;

public class ArrayListTest
{

public static void main(String[] args)
{
ArrayList list = new ArrayList();

String str = (String) list.get(0);
System.out.println ("获取list中第1个元素:"+str);
}

}


10-25 4646

10-17 86
10-20 87
09-17 57
09-01 1万+
03-25 41
08-27 80
03-08 847