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行 而已,心裡很輕鬆。不過教會了我一些東西。遇到真實的問題 首先把問題梳理清楚,最好能畫出流程圖 然後設計類 設計哪些類,類裡面有什麼變數,什麼函式,這個是需要經驗的。多總結 然後實現類的時候 其實就是實現裡面的方法,注意,一定要寫好偽碼...