查询效率低,增删效率高,线程不安全,一般不常用
建立包LinkedList
Node(创建链表)
public class Node {
Node previous;
Node next;
Object element;
public Node(Node previous, Node next, Object element) {
this.previous = previous;
this.next = next;
this.element = element;
}
public Node(Object element){
super();
this.element=element;
}
}
TestLinkedList(自定义一个链表,使用get)
public class TestLinkedList {
private Node first;
private Node last;
private int size;
public Object get(int index){
if(index<0||index>size-1){
throw new RuntimeException("索引数字不合法:"+index);
}
Node temp=null;
if(index<(size>>1)){
temp=first;
for(int i=0;i<index;i++){
temp=temp.next;
}
}else{
temp=last;
for(int i=size-1;i>index;i--){
temp=temp.previous;
}
}
return temp.element;
}
public void add(Object obj){
Node node=new Node(obj);
if(first==null){
first=node;
last=node;
}else{
node.previous=last;
node.next=null;
last.next=node;
last=node;
}
size++;
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder("[");
Node temp=first;
while(temp!=null){
sb.append(temp.element+",");
temp=temp.next;
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
public static void main(String[] args) {
TestLinkedList list=new TestLinkedList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
System.out.println(list);
System.out.println(list.get(1));
}
}
TestLinkedList02(增加remove)
public class TestLinkedList02 {
private Node first;
private Node last;
private int size;
public void remove(int index){
Node temp=getNode(index);
if(temp!=null){
Node up=temp.previous;
Node down=temp.next;
if(up!=null){
up.next=down;
}
if(down!=null) {
down.previous = up;
}
if(index==0){
first=down;
}
if(index==size-1){
last=up;
}
size--;
}
}
public Node getNode(int index){
Node temp=null;
if(index<(size>>1)){
temp=first;
for(int i=0;i<index;i++){
temp=temp.next;
}
}else{
temp=last;
for(int i=size-1;i>index;i--){
temp=temp.previous;
}
}
return temp;
}
public Object get(int index){
if(index<0||index>size-1){
throw new RuntimeException("索引数字不合法:"+index);
}
Node temp=getNode(index);
return temp!=null?temp.element:null;
}
public void add(Object obj){
Node node=new Node(obj);
if(first==null){
first=node;
last=node;
}else{
node.previous=last;
node.next=null;
last.next=node;
last=node;
}
size++;
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder("[");
Node temp=first;
while(temp!=null){
sb.append(temp.element+",");
temp=temp.next;
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
public static void main(String[] args) {
TestLinkedList02 list=new TestLinkedList02();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
System.out.println(list);
System.out.println(list.get(1));
list.remove(3);
System.out.println(list);
list.remove(0);
System.out.println(list);
System.out.println(list.get(1));
list.remove(5);
System.out.println(list);
System.out.println(list.get(1));
}
}
TestLinkedList03(插入节点)
public class TestLinkedList03 {
private Node first;
private Node last;
private int size;
public void add(int index,Object obj){
Node newNode=new Node(obj);
Node temp=getNode(index);
if(temp!=null){
Node up=temp.previous;
up.next=newNode;
newNode.previous=up;
newNode.next=temp;
temp.previous=newNode;
}
}
public void remove(int index){
Node temp=getNode(index);
if(temp!=null){
Node up=temp.previous;
Node down=temp.next;
if(up!=null){
up.next=down;
}
if(down!=null) {
down.previous = up;
}
if(index==0){
first=down;
}
if(index==size-1){
last=up;
}
size--;
}
}
public Node getNode(int index){
Node temp=null;
if(index<(size>>1)){
temp=first;
for(int i=0;i<index;i++){
temp=temp.next;
}
}else{
temp=last;
for(int i=size-1;i>index;i--){
temp=temp.previous;
}
}
return temp;
}
public Object get(int index){
if(index<0||index>size-1){
throw new RuntimeException("索引数字不合法:"+index);
}
Node temp=getNode(index);
return temp!=null?temp.element:null;
}
public void add(Object obj){
Node node=new Node(obj);
if(first==null){
first=node;
last=node;
}else{
node.previous=last;
node.next=null;
last.next=node;
last=node;
}
size++;
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder("[");
Node temp=first;
while(temp!=null){
sb.append(temp.element+",");
temp=temp.next;
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
public static void main(String[] args) {
TestLinkedList03 list=new TestLinkedList03();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
System.out.println(list);
list.add(3,"若颂");
System.out.println(list);
}
}
TestLinkedList04(增加小的封装、增加泛型)
public class TestLinkedList04<E> {
private Node first;
private Node last;
private int size;
public void add(int index,E element){
checkRange(index);
Node newNode=new Node(element);
Node temp=getNode(index);
if(temp!=null){
Node up=temp.previous;
up.next=newNode;
newNode.previous=up;
newNode.next=temp;
temp.previous=newNode;
}
}
public void remove(int index){
checkRange(index);
Node temp=getNode(index);
if(temp!=null){
Node up=temp.previous;
Node down=temp.next;
if(up!=null){
up.next=down;
}
if(down!=null) {
down.previous = up;
}
if(index==0){
first=down;
}
if(index==size-1){
last=up;
}
size--;
}
}
private Node getNode(int index){
checkRange(index);
Node temp=null;
if(index<(size>>1)){
temp=first;
for(int i=0;i<index;i++){
temp=temp.next;
}
}else{
temp=last;
for(int i=size-1;i>index;i--){
temp=temp.previous;
}
}
return temp;
}
public E get(int index){
checkRange(index);
Node temp=getNode(index);
return temp!=null?(E)temp.element:null;
}
private void checkRange(int index){
if(index<0||index>size-1){
throw new RuntimeException("索引数字不合法:"+index);
}
}
public void add(E element){
Node node=new Node(element);
if(first==null){
first=node;
last=node;
}else{
node.previous=last;
node.next=null;
last.next=node;
last=node;
}
size++;
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder("[");
Node temp=first;
while(temp!=null){
sb.append(temp.element+",");
temp=temp.next;
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
public static void main(String[] args) {
TestLinkedList04<String> list=new TestLinkedList04<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
System.out.println(list);
System.out.println(list.get(1));
}
}