HeadFirstJava 14 資料結構

2021-07-15 06:35:51 字數 4744 閱讀 2937

list——知道索引的集合

set——沒有重複元素的集合

map——成對的鍵、值得集合

arraylist

1 概念

arraylist是可動態增長或縮減的索引序列,相當於動態陣列;

是用陣列結構實現;

隨機訪問效率高;

不適合經常作插入或刪除操作;

對容量不確定的效率較低,可能經常需要對元素進行複製;

2 使用

2.1 定義arrayiist物件

arraylistlist1 = new arraylist();

2.2 新增資料

a 在arraylist末尾新增資料

list1.add("y");

list1.add("q");

list1.add("a"); // 輸出list1是[y, q, a]

b 在下標為n處新增資料

list1.add(1, "t"); // 輸出list1是[y, t, q, a]

c 將乙個arraylist中所有資料新增到另乙個arraylist中

arraylistlist2 = new arraylist();

list2.add("w");

list2.add("c");

list1.addall(list2); // 輸出list1是[y, t, q, a, w, c]

d 將乙個arraylist中所有資料新增到另乙個arraylist中的下標為n處

list1.addall(2, list2); // 輸出list1是[y, t, w, c, q, a, w, c]

2.3 刪除資料

a 刪除下標為n處的資料

list1.remove(3); // 輸出list1是[y, t, w, q, a, w, c]

b 按照指定內容刪除第乙個匹配的資料

list1.remove("w"); // 輸出list1是[y, t, q, a, w, c]

c 按照指定集合刪除縮合匹配的資料

前提是list1=[s, y, q, a, t, y, q, a],lsit2=[y, q, a]

list1.removeall(list2); // 輸出list1是[s, t]

d 清空arraylist

list1.clear(); // 輸出list1是

2.4 修改資料

a 修改下標為n處的資料

list1.set(1, "y"); // 前提list1=[s, t],執行後list1=[s, q]

2.5 查詢資料

a 獲取下標為n的資料

string first = list1.get(1); //前提是list1=[s, q],執行後first="q"

2.6 迭代器遍歷

arraylistlist = new arraylist();

list.add("y");

list.add("q");

list.add("a");

list.add("t");

list.add("w");

list.add("c");

// iterator()方法返回iterator

iteratorit = list.iterator();

// hasnext()方法檢查arraylist中是否有下乙個元素

while (it.hasnext())

2.7 排序

arraylist沒有sort()方法,因此需要借助collections.sort()方法對arraylist的中string按照字母進行排序;

linkedlistlist = new linkedlist();

list.add("y");

list.add("q");

list.add("a");

list.add("t");

list.add("w");

list.add("c");

// 排序前list=[y,q,a,t,w,c],排序後list=[a,c,q,t,w,y]

collections.sort(list);

而對於自己定義的類進行排序,無法簡單使用上述方法進行排序,否則編譯器報錯;

方法1——使用comparable

首先檢視sort()方法的幫助文件,乙個如下:

public static > void sort(listlist)

其中,comparable是介面;對於泛型,extends代表「是乙個……」,適用於類和介面;」t extends comparable「可讀作「t必須有實現comparable的型別」

」lsit「表示僅能繼承comparable的引數化型別的list;

」<? super t>表示comparable的型別引數必須是t或t的父型「

因此,對於自己編寫的類的arraylist進行排序,必須實現comparable;

comparable介面只有乙個方法需要實現,返回值為負整數、零、正整數,分別表示當前物件小於、等於、大於指定物件;

public inte***ce comparable

接著確定如何比較才能有辦法實現comparable介面,這裡按照歌名字母進行排序;

class song implements comparable

song(string t, string a, string r, string b)

public string gettitle()

public string getartist()

}

方法2——使用comparator

還有另乙個sort()方法,取用comparator引數;

sort(listlist, comparator<? super t> c)

comparator介面只有乙個方法需要實現;

public inte***ce comparator

sort()方法帶有comparator,不會呼叫元素的compareto()方法,而是呼叫comparator的compare()方法;

class artistcompare implements comparator

}arraylistsonglist = new arraylist();

artistcompare artistcompare = new artistcompare();

collections.sort(songlist, artistcompare);

linkedlist

1 概念

linkedlist在任何位置可高效地插入和刪除的有序序列;

是用鍊錶結構實現;

隨機訪問效率低;

適合作插入或刪除操作;

2 操作

因為linkedlist是使用鍊錶結構實現的,因此沒有get()和set()方法;

hashset

1 概念

hashset是沒有重複元素的無序集合;

2 使用

3 物件的等價

3.1 引用相等性

堆上同一物件的兩個引用;

使用==判斷兩個引用是否相等;

3.2 物件相等性

堆上的兩個不同物件在意義上是相同的;

使用equals()方法判斷兩個物件在意義上是否相等;

treeset

1 概念

沒有重複元素的有序集合;

2 使用

要使用treeset,以下其中一項必須為真;

2.1 集合中的元素必須是有實現comparable的型別

2.2 使用過載、取用comparator引數的建構函式建立treeset

hashmap

1 概念

儲存鍵/值關聯的資料結構;

2 使用

2.1 常用方法

hashmapmap = new hashmap();

map.put("math", 100);

map.put("english", 97);

system.out.println(map.containskey("chinese"));

system.out.println(map.containsvalue(100));

double scoremath = map.get("math");

system.out.println(map.size());

map.remove("math");

2.2 遍歷

hashmapmap = new hashmap();

map.put("twc", 25);

map.put("yq", 28);

iterator it = map.entryset().iterator();

while(it.hasnext())

Headfirst java設計模式 裝飾者模式

裝飾者模式 動態的將責任附加到物件上。若要擴充套件功能,裝飾者模式提供了比繼承更有彈性的替代方案。實現 1 先宣告beverage和condimentdecorator兩個抽象類 public abstract class beverage public abstract double cost p...

Headfirst java設計模式 外觀模式

外觀模式 提供乙個統一的介面,用來訪問子系統中的一群介面。外觀模式定義了乙個高層介面,讓子系統更容易使用。簡而言之 外觀模式目的是讓介面更簡單。public class amplifier public void off public void setcd cdplayer cdplayer pub...

記錄 Head first java 第五章

一開始很害怕第五章。現在自己碼一遍 覺得其實也沒什麼,短短60行 而已,心裡很輕鬆。不過教會了我一些東西。遇到真實的問題 首先把問題梳理清楚,最好能畫出流程圖 然後設計類 設計哪些類,類裡面有什麼變數,什麼函式,這個是需要經驗的。多總結 然後實現類的時候 其實就是實現裡面的方法,注意,一定要寫好偽碼...