資料結構
資料結構 : 資料用什么樣的方式組合在一起,
資料存盤的常用結構有:堆疊、佇列、陣列、鏈表
堆疊
堆疊:stack,又稱堆疊,它是運算受限的線性表,其限制是僅允許在標的一端進行插入和洗掉操作,不允許在其他任何位置進行添加、查找、洗掉等操作,
采用該結構的集合,對元素的存取有如下的特點
-
先進后出(FILO),例如,子彈壓進彈夾,先壓進去的子彈在下面,后壓進去的子彈在上面,當開槍時,先彈出上面的子彈,然后才能彈出下面的子彈,
-
堆疊的入口、出口的都是堆疊的頂端位置,
這里兩個名詞需要注意:
- 壓堆疊:就是存元素,即,把元素存盤到堆疊的頂端位置,堆疊中已有元素依次向堆疊底方向移動一個位置,
- 彈堆疊:就是取元素,即,把堆疊的頂端位置元素取出,堆疊中已有元素依次向堆疊頂方向移動一個位置,
佇列
queue,簡稱隊,它同堆疊一樣,也是一種運算受限的線性表,其限制是僅允許在表的一端進行插入,而在表的另一端進行洗掉,
采用該結構的集合,對元素的存取有如下的特點:
- 先進先出(FIFO),例如,小火車過山洞,車頭先進去,車尾后進去;車頭先出來,車尾后出來,
- 佇列的入口、出口各占一側,
陣列
Array,是有序的元素序列,陣列是在記憶體中開辟一段連續的空間,并在此空間存放元素,
采用該結構的集合,對元素的存取有如下的特點:
-
查找元素快:通過索引,可以快速訪問指定位置的元素
-
增刪元素慢
- 指定索引位置增加元素:需要創建一個新陣列,將指定新元素存盤在指定索引位置,再把原陣列元素根據索引,復制到新陣列對應索引的位置,
- 指定索引位置洗掉元素:需要創建一個新陣列,把原陣列元素根據索引,復制到新陣列對應索引的位置,原陣列中指定索引位置元素不復制到新陣列中,
鏈表
linked list,由一系列結點node(鏈表中每一個元素稱為結點)組成,結點可以在運行時i動態生成,
每個結點包括兩個部分:一個是存盤資料元素的資料域,另一個是存盤下一個結點地址的指標域,
我們常說的鏈表結構有單向鏈表與雙向鏈表,這里說是單向鏈表,
采用該結構的集合,對元素的存取有如下的特點:
-
多個結點之間,通過地址進行連接,例如,多個人手拉手,每個人使用自己的右手拉住下個人的左手,依次類推,這樣多個人就連在一起了,
-
查找元素慢:想查找某個元素,需要通過連接的節點,依次向后查找指定元素
-
增刪元素快
List 介面
java.util.List介面繼承自Collection介面,是單列集合的一個重要分支,習慣性地會將實作了List介面的物件稱為List集合,
在List集合中允許出現重復的元素,所有的元素是以一種線性方式進行存盤的,在程式中可以通過索引來訪問集合中的指定元素,另外,List集合還有一個特點就是元素有序,即元素的存入順序和取出順序一致,
List介面特點:
- 它是一個元素存取有序的集合,例如,存元素的順序是11、22、33,那么集合中,元素的存盤就是按照11、22、33的順序完成的),
- 它是一個帶有索引的集合,通過索引就可以精確的操作集合中的元素(與陣列的索引是一個道理),
- 集合中可以有重復的元素,通過元素的equals方法,來比較是否為重復的元素,
常用方法
List作為Collection集合的子介面,不但繼承了Collection介面中的全部方法,而且還增加了一些根據元素索引來操作集合的特有方法
public void add(int index, E element): 將指定的元素,添加到該集合中的指定位置上,public E get(int index):回傳集合中指定位置的元素,public E remove(int index): 移除串列中指定位置的元素, 回傳的是被移除的元素,public E set(int index, E element):用指定元素替換集合中指定位置的元素,回傳值的更新前的元素,
List的子類
ArrayList集合
java.util.ArrayList集合資料存盤的結構是陣列結構,元素增刪慢,查找快,由于日常開發中使用最多的功能為查詢資料、遍歷資料,所以ArrayList是最常用的集合,
隨意的使用ArrayList完成任何需求是不提倡的,
LinkedList集合
java.util.LinkedList集合資料存盤的結構是鏈表結構,方便元素添加、洗掉的集合,是一個雙向鏈表結構
import java.util.LinkedList;
/*
java.util.LinkedList
有序有索引 元素可重復
底層資料結構是雙向鏈表
查詢慢 增刪快
方法:
public void add(E e) :將指定元素添加到串列的結尾
public void addFirst(E e) :將指定元素插入此串列的開頭,
public void addLast(E e) :將指定元素添加到此串列的結尾, 其實相當于add方法
public E get(int index) :回傳串列的指定元素,
public E getFirst() :回傳此串列的第一個元素,
public E getLast() :回傳此串列的最后一個元素,
public E remove() :呼叫removeFirst方法, 移除并回傳此串列的第一個元素,
public E removeFirst() :移除并回傳此串列的第一個元素,
public E removeLast() :移除并回傳此串列的最后一個元素,
public E pop() :從此串列所表示的堆疊處彈出一個元素,
public void push(E e) :將元素推入此串列所表示的堆疊,
public boolean isEmpty() :如果串列不包含元素,則回傳true,
public void clear() :洗掉串列中所有元素
*/
public class Demo {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<Integer>();
list.addLast(200);
list.add(1);
list.add(2);
list.addFirst(100);
System.out.println(list);
System.out.println(list.get(2));
System.out.println(list.getFirst());
System.out.println(list.getLast());
list.removeFirst();
list.removeLast();
System.out.println(list);
list.clear();
System.out.println(list);
// pop和push是堆疊結構
LinkedList<Integer> stack = new LinkedList<Integer>();
// 壓堆疊
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack);
// 彈堆疊, 并回傳彈出的內容
System.out.println(stack.pop());
System.out.println(stack);
}
}
Collections類
java.utils.Collections是集合工具類,用來對集合進行操作
shuffle方法
public static void shuffle(List list)
//打亂(List)集合中元素
昨天的練習題中的洗牌需求可以使用該方法進行實作
Collections.shuffle(pokerArrayList);
sort方法
public static <T extends Comparable<? super T>> void sort(List<T> list)
// 對集合中元素進行排序 集合中的元素必須實作自然排序介面 Comparable 并重寫compareTo方法
public static <T> void sort(List<T> list, Comparator<? super T> c)
// 通過傳入的比較器指定的規則進行排序
public class Demo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("anc");
list.add("abc");
list.add("Abc");
list.add("ABc");
Collections.sort(list);
System.out.println(list);
List<Person> persons = new ArrayList<>();
persons.add(new Person(23));
persons.add(new Person(17));
persons.add(new Person(26));
Collections.sort(persons);
System.out.println(persons);
// 傳入Comparator比較器指定規則 完成降序
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// o1-o2升序 o2-o1降序
return o2.compareTo(o1);
}
});
System.out.println(list);
}
}
class Person implements Comparable<Person> {
private int age;
public Person(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Person other) {
return this.age - other.age;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
'}';
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/549608.html
標籤:Java
