day14

2020-08-11 20:29:46
  1. List
    (1). List去重:
    去除集閤中字串的重複值(字串的內容相同)
    List result = new ArrayList<>();(建立一個新的集合,用於存放不重複的元素)
    (2).LinkList中特有方法
    addFirst/addLast: 新增頭/新增尾
    getFirst/getLast 獲取頭/獲取尾
    removeFirst/removeLast 移除頭/移除尾
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 +
                '}';
    }
}