生活随笔
收集整理的這篇文章主要介紹了
Java中集合(四)LinkedList
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、概述
基于鏈表內存空間不連續。增刪較快,查詢首尾特快 ,但是查詢其他位置較慢元素可以重復,列表中的元素會被自動編號本身是線程不安全的集合每一個元素都有三部分組成: 頭部:存放上一個節點的地址 ? ,中部:存放數據 ?,尾部: 存放下一個節點的地址 練習: 自己實現一個LinkedList ?,里面存放String類型的值
public class LinkedListDemo {/************************************************/// 定義一個節點類private class Node {Node prev;// 上一個節點String data;// 數據Node next; // 下一個節點public Node(Node prev, String data, Node next) {super();this.prev = prev;this.data = data;this.next = next;}public String getData() {return data;}public void setData(String data) {this.data = data;}}/************************************************/private Node frist; // 頭節點private Node last;// 尾節點private int size;// 節點個數public LinkedListDemo() {// frist = last;}public void add(String str) {// 如果是頭結點,直接指向新街點if (frist == null) {this.frist = new Node(null, str, null);// 因為只有以后各節點,所以頭尾一致this.last = this.frist;} else {// 如果不是頭結點 ,新街點指向原來的尾節點Node node = new Node(this.last, str, null);// 尾節點指向新街點this.last.next = node;this.last = node;}size++;}public void remove(int index) {// 判斷下標越界if (index >=size||index<0) {throw new IndexOutOfBoundsException("Index:" + index);}// 記錄要找的節點Node node = this.frist;for (int i = 0; i <index; i++) {node = node.next;}// 獲取要刪除的節點的上一個和下一個節點Node prev = node.prev;Node next = node.next;if(index==0){this.frist = next;}else if(index == size-1){this.last = prev;}else{// 把原本下一位的頭結點指向上一位的尾節點prev.next = next;// 把原本上一位的尾節點指向下一位next.prev = prev;}// 元素個數少一size--;}public int indexOf(String str) {Node node = this.frist;for (int i = 0; i < size; i++) {if (node.data == str || str != null && str.equals(node.data)) {return i;}// 指向下一節點node = node.next;}return -1;}public void add(int index, String str) {Node node = new Node(null, str, null);// 判斷下標是否越界if (index > size) {throw new IndexOutOfBoundsException();} else if (index == 0) {node.next = this.frist;this.frist = node;} else {// 查找占用這個位置的當前元素Node no = this.frist;for (int i = 0; i < index; i++) {no = no.next;}// 記錄這個位置的前后節點Node prev = no.prev;Node next = no.next;// 在node和上一個節點之間插入一個元素prev.next = node;no.prev = prev;node.next = no;no.prev = node;}size++;}@Overridepublic String toString() {Node node = this.frist;//System.out.println(node.data);StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < size; i++) {sb.append(node.data+",");node = node.next;}String str = sb.toString();str = str.substring(0,str.length()-1);str += "]";return str;}
}
public static void main(String[] args) {LinkedListDemo l = new LinkedListDemo();//添加元素l.add("aa");l.add("bb");l.add("cc");l.add("dd");//向指定位置添加元素l.add(1, "ee");l.add(0, "ff");System.out.println(l);//移除元素l.remove(3);System.out.println(l);//獲取指定元素的位置System.out.println(l.indexOf("aa"));}
}
總結
以上是生活随笔為你收集整理的Java中集合(四)LinkedList的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。