數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu) : 數(shù)據(jù)用什么樣的方式組合在一起。
數(shù)據(jù)存儲的常用結(jié)構(gòu)有:棧、隊(duì)列、數(shù)組、鏈表
棧
棧:stack,又稱堆棧,它是運(yùn)算受限的線性表,其限制是僅允許在標(biāo)的一端進(jìn)行插入和刪除操作,不允許在其他任何位置進(jìn)行添加、查找、刪除等操作。
采用該結(jié)構(gòu)的集合,對元素的存取有如下的特點(diǎn)
-
先進(jìn)后出(FILO)。例如,子彈壓進(jìn)彈夾,先壓進(jìn)去的子彈在下面,后壓進(jìn)去的子彈在上面,當(dāng)開槍時,先彈出上面的子彈,然后才能彈出下面的子彈。
-
棧的入口、出口的都是棧的頂端位置。
這里兩個名詞需要注意:
- 壓棧:就是存元素。即,把元素存儲到棧的頂端位置,棧中已有元素依次向棧底方向移動一個位置。
- 彈棧:就是取元素。即,把棧的頂端位置元素取出,棧中已有元素依次向棧頂方向移動一個位置。
隊(duì)列
queue,簡稱隊(duì),它同堆棧一樣,也是一種運(yùn)算受限的線性表,其限制是僅允許在表的一端進(jìn)行插入,而在表的另一端進(jìn)行刪除。
采用該結(jié)構(gòu)的集合,對元素的存取有如下的特點(diǎn):
- 先進(jìn)先出(FIFO)。例如,小火車過山洞,車頭先進(jìn)去,車尾后進(jìn)去;車頭先出來,車尾后出來。
- 隊(duì)列的入口、出口各占一側(cè)。
數(shù)組
Array,是有序的元素序列,數(shù)組是在內(nèi)存中開辟一段連續(xù)的空間,并在此空間存放元素。
采用該結(jié)構(gòu)的集合,對元素的存取有如下的特點(diǎn):
-
查找元素快:通過索引,可以快速訪問指定位置的元素
-
增刪元素慢
- 指定索引位置增加元素:需要創(chuàng)建一個新數(shù)組,將指定新元素存儲在指定索引位置,再把原數(shù)組元素根據(jù)索引,復(fù)制到新數(shù)組對應(yīng)索引的位置。
- 指定索引位置刪除元素:需要創(chuàng)建一個新數(shù)組,把原數(shù)組元素根據(jù)索引,復(fù)制到新數(shù)組對應(yīng)索引的位置,原數(shù)組中指定索引位置元素不復(fù)制到新數(shù)組中。
鏈表
linked list,由一系列結(jié)點(diǎn)node(鏈表中每一個元素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時i動態(tài)生成。
每個結(jié)點(diǎn)包括兩個部分:一個是存儲數(shù)據(jù)元素的數(shù)據(jù)域,另一個是存儲下一個結(jié)點(diǎn)地址的指針域。
我們常說的鏈表結(jié)構(gòu)有單向鏈表與雙向鏈表,這里說是單向鏈表。
采用該結(jié)構(gòu)的集合,對元素的存取有如下的特點(diǎn):
-
多個結(jié)點(diǎn)之間,通過地址進(jìn)行連接。例如,多個人手拉手,每個人使用自己的右手拉住下個人的左手,依次類推,這樣多個人就連在一起了。
-
查找元素慢:想查找某個元素,需要通過連接的節(jié)點(diǎn),依次向后查找指定元素
-
增刪元素快
List 接口
java.util.List
接口繼承自Collection
接口,是單列集合的一個重要分支,習(xí)慣性地會將實(shí)現(xiàn)了List
接口的對象稱為List集合。
在List集合中允許出現(xiàn)重復(fù)的元素,所有的元素是以一種線性方式進(jìn)行存儲的,在程序中可以通過索引來訪問集合中的指定元素。另外,List集合還有一個特點(diǎn)就是元素有序,即元素的存入順序和取出順序一致。
List接口特點(diǎn):
- 它是一個元素存取有序的集合。例如,存元素的順序是11、22、33。那么集合中,元素的存儲就是按照11、22、33的順序完成的)。
- 它是一個帶有索引的集合,通過索引就可以精確的操作集合中的元素(與數(shù)組的索引是一個道理)。
- 集合中可以有重復(fù)的元素,通過元素的equals方法,來比較是否為重復(fù)的元素。
常用方法
List作為Collection集合的子接口,不但繼承了Collection接口中的全部方法,而且還增加了一些根據(jù)元素索引來操作集合的特有方法
-
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
集合數(shù)據(jù)存儲的結(jié)構(gòu)是數(shù)組結(jié)構(gòu)。元素增刪慢,查找快,由于日常開發(fā)中使用最多的功能為查詢數(shù)據(jù)、遍歷數(shù)據(jù),所以ArrayList
是最常用的集合。
隨意的使用ArrayList完成任何需求是不提倡的。
LinkedList集合
java.util.LinkedList
集合數(shù)據(jù)存儲的結(jié)構(gòu)是鏈表結(jié)構(gòu)。方便元素添加、刪除的集合。是一個雙向鏈表結(jié)構(gòu)
import java.util.LinkedList;
/*
java.util.LinkedList
有序有索引 元素可重復(fù)
底層數(shù)據(jù)結(jié)構(gòu)是雙向鏈表
查詢慢 增刪快
方法:
public void add(E e) :將指定元素添加到列表的結(jié)尾
public void addFirst(E e) :將指定元素插入此列表的開頭。
public void addLast(E e) :將指定元素添加到此列表的結(jié)尾, 其實(shí)相當(dāng)于add方法
public E get(int index) :返回列表的指定元素。
public E getFirst() :返回此列表的第一個元素。
public E getLast() :返回此列表的最后一個元素。
public E remove() :調(diào)用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是棧結(jié)構(gòu)
LinkedList<Integer> stack = new LinkedList<Integer>();
// 壓棧
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack);
// 彈棧, 并返回彈出的內(nèi)容
System.out.println(stack.pop());
System.out.println(stack);
}
}
Collections類
java.utils.Collections
是集合工具類,用來對集合進(jìn)行操作文章來源:http://www.zghlxwxcb.cn/news/detail-409929.html
shuffle方法
public static void shuffle(List list)
//打亂(List)集合中元素
昨天的練習(xí)題中的洗牌需求可以使用該方法進(jìn)行實(shí)現(xiàn)文章來源地址http://www.zghlxwxcb.cn/news/detail-409929.html
Collections.shuffle(pokerArrayList);
sort方法
public static <T extends Comparable<? super T>> void sort(List<T> list)
// 對集合中元素進(jìn)行排序 集合中的元素必須實(shí)現(xiàn)自然排序接口 Comparable 并重寫compareTo方法
public static <T> void sort(List<T> list, Comparator<? super T> c)
// 通過傳入的比較器指定的規(guī)則進(jìn)行排序
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比較器指定規(guī)則 完成降序
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 +
'}';
}
}
到了這里,關(guān)于java -- 簡單的數(shù)據(jù)結(jié)構(gòu)、List接口和Collections類的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!