總結hashmap由陣列+鍊錶組成的,陣列是hashmap的主體,鍊錶則是主要為了解決雜湊衝突而存在的,如果定位到的陣列位置不含鍊錶(當前entry的next指向null),那麼查詢,新增等操作很快,僅需一次定址即可;如果定位到的陣列包含鍊錶,對於新增操作,其時間複雜度為o(n),首先遍歷鍊錶,存在即覆蓋,否則新增;對於查詢操作來講,仍需遍歷鍊錶,然後通過key物件的equals方法逐一比對查詢。
在學習集合之後就接到了這樣的乙個任務,因為剛學習了map自然而然想的就是怎麼樣直接利用鍵值對的方式對快遞進行存呢?開始的時候想的是把櫃子當做鍵來使用,在進行資料的操作是遇到了一些困難:因為我是將鍵單獨移動出來,那麼對於整個資料來說還是不怎麼好搞。後面在一番的思考下我利用了單號作為鍵來使用,而快遞的位置在data中定義xy來表示座標。然後就如下:
1.建立data並定義以下屬性
public
class
data
2.對data類裡的屬性進行有參和無參構造以及set、get----注意在後面的過程中會利用equals和hashcode,需要將要比計較的屬性變數進行hashcode和equals。
public
data
(string number, string company, int code, int x, int y
)public
data
(string number
) @override
public boolean equals
(object o
) @override
public int hashcode()
@override
public string tostring()
';}public string getnumber()
public
void
setnumber
(string number
)public string getcompany()
public
void
setcompany
(string company
)public int getcode()
public
void
setcode
(int code
)public int getx()
public
void
setx
(int x
)public int gety()
public
void
sety
(int y
)}
**如下(示例):
1.在建立檢視的時候要將大概的檢視方法想好,下面是關於輸入時的異常處理。
string text = input.
nextline()
;int num =-1
; try
catch
(numberformatexception e)
if(num <
0||num>2)
return num;
}
2.在檢視中包括:歡迎介面 取件退出介面 管理員操作介面 使用者操作介面 以及列印全部 不滿足退出。
//歡迎
public
void
welcome()
//再見
public
void
bye(
)//選擇身份選單
public int menu()
//快遞員瀏覽選單
public int cmenu()
//使用者瀏覽選單
public int umenu()
//是否刪除
public int delete()
//存在退出
public
void
dataexit()
//不存在該快遞
public
void
printnull
()
在資料排程類中(最重要):在其中我們要實現資料的增刪改查,以及在檢視中輸入需要的數,在這個地方得到體現。具體如下:
1.定義快遞管理員的操作方法,在方法中要實現增刪改查;取件碼的隨機生成且不能重複的6位數;將單號作為鍵來儲存在hashmap中,data中的屬性作為值儲存;生成快遞櫃;
用到的方法有:hashmap,random,scanner,迴圈
1:增加方法如下:
int code =0;
dowhile
(datamap.
get(code)
!=null);
int x =-1
; int y =-1
;dowhile
(datamap.
get(x)
!=null
&& datamap.
get(y)
!=null);
data e =
newdata
(number,company,code,x,y)
;//將上面新增的資訊存到e物件中
datamap.
put(number,e)
; system.out.
println
("快遞儲存成功 !");
//輸出存的快遞
system.out.
println
("快遞存放在第"
+(e.
getx()
+1)+
"排第"
+(e.
gety()
+1)+
"列。快遞資訊:"
+"快遞單號為:"
+e.getnumber()
+",快遞公司為"
+e.getcompany()
+"取件碼為"
+e.getcode()
+"。");
count++
;//定義執行的次數
2.修改快遞方法如下:
system.out.
println
("請輸入要修改的快遞單號:");
string oldnumber = inupt.
nextline()
;if(datamap.
get(oldnumber)
==null
)else
3.刪除快遞
system
.out.
println
("請輸入要刪除的快遞單號:");
string delnumber = inupt.
nextline()
;if(datamap.
get(delnumber)
==null
)else
}
4.檢視所有快遞
for
(string number:datamap.
keyset()
)
2.使用者操作介面,在這個介面是對快遞單號的簡單查詢然後取出快遞,在之後在儲存的位置刪除相應資料。//使用者
private
static
void
uclient()
else
if(count == temp)
}
在學習完集合後去對快遞儲存相比於用二維陣列的儲存來說要方便很多,方便理解。但是在利用集合儲存是需要多多的考慮方法的可用性,對每個集合的性質都要理解。這是今天整理的快遞管理系統。多多思考!! HttpClient 實現 快遞100 快遞查詢
本工程使用快遞100 查詢鏈結實現,用到了httpclient以及gson。詳細工程可見本人github。工程僅供學習,禁止商業使用。主要使用的是快遞100官方提供的查詢api 先查詢該單號所屬快遞商 快遞單號 返回的json樣例 auto陣列中每乙個物件,都是可能的快遞商資訊,一般第乙個為可能性最...
快遞訪問管理系統
快遞訪問管理系統 思路 1.需要有乙個類存放所有快遞資訊 kuaidi 2.需要有乙個類實現系統管理員的對快遞的操作 guanluyuan 3.需要有乙個類實現使用者的取件 yonghu 4.為了實現後guanliyuan類和yonghu類對kuaidi類中快遞資訊的操作,設計成子父類的形式 5.因...
hashmap實現機制
int uint key.gethashcode 0x8ffffff 具體多少忘記了,總之就是把它弄成正數 int index uint map.length 把value放到那個 index位置。下次訪問時再通過 key的hashcode 0x8fffff 再 map.length 就知道valu...