import java.util.Iterator;
import java.util.LinkedList;
/**
* @author Administrator
*/
public class MyStackDemo {
public static void main(String[] args) {
MyStack mt = new MyStack();
mt.save("濤哥");
mt.save("行哥");
mt.save("橋姐");
mt.save("娜姐");
System.out.println(mt);
while (mt.hasNext()) {
System.out.println(mt.delete());
}
}
}
class MyStack {
private LinkedList<Object> ll;
public MyStack() {
ll = new LinkedList<>();
}
public void save(Object obj) {
ll.addFirst(obj);
}
public Object delete() {
if (ll != null) {
return ll.removeFirst();
} else {
return null;
}
}
public int count() {
return ll.size();
}
public boolean hasNext() {
if (ll.size() != 0) {
return true;
}
return false;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
Iterator<Object> it = ll.iterator();
while (it.hasNext()) {
sb.append(it.next()).append(", ");
}
sb.replace(sb.length() - 2, sb.length(), "");
sb.append("]");
return sb.toString();
}
}
2.增強for回圈
格式:
for(數據型別 變數名 : 集合或者陣列名){
語句體;
}
數據型別:指的是集合或者陣列中的元素數據型別
變數名:隨便起 代表集合或者陣列中的任意一個元素
public class ListDemo {
public static void main(String[] args) {
getSum(3,4,5,6);
}
public static void getSum(int...a){
int sum=0;
for(int j=0;j<a.length;j++){
sum+=a[j];
}
System.out.println(sum);
}
}
3.可變參數:你可以接受任意多個同類型的參數
(1).可變參數只能放在參數列表的末尾
(2).每個參數列表中有且只能有一個可變參數
注意:
這裏的變數其實是一個數組
如果一個方法有可變參數,並且有多個參數,那麼可變參數必須是最後一個, 一個方法中最多隻能有一個可變參數.
4.陣列和集合之間的轉換
(1).陣列轉集合:statitc List Arrays.asList(T… t);
(2).集合轉陣列:Object[] toArray();
5.Set
(1).特點: Set中的元素是無序的(不能使用索引操作元素),元素不可重複(List:允許重複元素 有序集合)
(2).Collection:
List(I): 有序的,元素可重複
ArrayList
LinkedList
Set(I): 無序的(不能使用索引操作元素),元素不能重複
HashSet: 無法保證存入和取出的順序
LinkedHashSet: 可以保證存入和取出的順序(鏈表實現)
TreeSet:有序的(可以對元素排序)
(3).不可重複性:
是由hashCode和equals方法保證的
存放元素的時候,先求出元素的hashCode,如果集閤中沒有這樣的hashCode 值,說明該元素在集閤中不存在, 可以存;有這樣的hashCode,在比較equals: 如果爲true: 集閤中已經存在該元素,則不存,如果爲false: 則可以存.
6.Map(鍵值對兒的形式存在的)
(1).概述
a.雙列集合的根介面
b.將鍵對映到值的物件
c.一個對映不能包含重複的鍵
d.每個鍵最多隻能對映到一個值 key=value
e.Map介面和Collection介面的不同 ,Map是雙列的,Collection是單列的
f.Map的鍵唯一,Collection的子體系Set是唯一的
g.Map集合的數據結構值針對鍵有效,跟值無關
(2).方法
V put(K key,V value) 新增元素
V remove(Object key) 移除key 對應的 鍵值對
void clear() 清空map
boolean containsKey(Object key) 是否包含key
boolean containsValue(Object value) 是否包含value
boolean isEmpty() 是否爲空
int size() 鍵值對的個數
(3).遍歷
keySet: 得到所有的key的集合
entrySet: 得到所有的鍵值對的集合
values: 獲取所有的值
java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
HashMap<String,String> hm=new HashMap<String,String>();
hm.put("施耐庵","水滸傳");
hm.put("羅貫中","三國演義");
hm.put("曹雪芹","紅樓夢");
hm.put("吳承恩","西遊記");
//keySet: 得到所有的key的集合
Set<String> set =hm.keySet();
for(String s:set){
System.out.println(s+"===="+hm.get(s));
}
// entrySet 得到所有的鍵值對的集合
Set<Map.Entry<String,String>> et=hm.entrySet();
for(Map.Entry<String,String> e:et){
System.out.println(e.getKey()+"==="+e.getValue());
}
/*
有如下字串:
成龍,10000;李冰冰,20000;李連傑,30000;成龍,2000;李連傑,10000;李冰冰,2000
求出每個明星捐款次數和捐款總額
*/
import java.util.HashMap;
public class DonateDemo {
public static void main(String[] args) {
HashMap<String, Star> ch = new HashMap<>();
String str = "成龍,10000;李冰冰,20000;李連傑,30000;成龍,2000;李連傑,10000;李冰冰,2000";
String[] sp=str.split(";");
for(int i=0;i<sp.length;i++){
String[] sp2=sp[i].split(",");
Star st = new Star(sp[0], Integer.parseInt(sp2[1]), 1);
if(!ch.containsKey(sp2[0])){
ch.put(sp2[0],st);
}else{
Star star=ch.get(sp2[0]);
int money=star.money;
int count=star.count;
money+=Integer.parseInt(sp2[1]);
count++;
star.money=money;
star.count=count;
ch.put(sp2[0],star);
}
}
System.out.println(ch);
}
}
class Star {
String name;
int money;
int count;
public Star() {
}
public Star(String name, int money, int count) {
this.name = name;
this.money = money;
this.count = count;
}
@Override
public String toString() {
return "Star{" +
"name='" + name + '\'' +
", money=" + money +
", count=" + count +
'}';
}
}