筆記-迎難而上之Java基礎進階1

来源:https://www.cnblogs.com/train99999/archive/2019/05/22/10903597.html
-Advertisement-
Play Games

Collection集合 數組的長度是固定的,集合的長度是可變的 數組中存儲的是同一類型的元素,可以存儲基本數據類型值。集合存儲的都是對象。而且對象的類型可以不一致。 集合框架 java import java.util. ; public class IteratorDemo{ public st ...


Collection集合

數組的長度是固定的,集合的長度是可變的

數組中存儲的是同一類型的元素,可以存儲基本數據類型值。集合存儲的都是對象。而且對象的類型可以不一致。

集合框架

img

import java.util.Collection;
import java.util.ArrayList;
//Collection的常用方法
public class CollectionDemo{
    public static void main(String[] args){
    //Collection是一個介面無法創建對象,可以使用多態來使用方法
    Collection<String> collection = new ArrayList<>();
    //add方法,向集合添加元素
    collection.add("李白");
    //collection.add(String);不可以添加非指定的類型,
    collection.add("蘇軾");
    collection.add("杜甫");
    collection.add("王安石");
    collection.add("李清照");
    System.out.println(collection);
    //remove方法,返回值類型是boolean,把給定的對象刪除
    //collection.remove("林黛玉");
    //System.out.println(aremove);沒有則返回false
    collection.remove("李清照");
    //判斷當前集合中是否包含了給定的對象,返回值類型為boolean
    boolean acontains = collection.contains("李清照");
    System.out.println(acontains);//false
    //size,返回集合中元素的個數
    int asize = collection.size();
    System.out.println(asize);//4
    //isEmpty,判斷集合是否為空,集合是空,返回true,不是空返回false
    boolean aisEmpty = collection.isEmpty();
    System.out.println(aisEmpty);//false
    //toArray,把集合中的元素,存儲到數組中,返回值類型為Object[]數組
    Object[] atoArray = collection.toArray();
    //遍曆數組
    for(int i=0;i<atoArray.length;i++){
        System.out.println(atoArray[i]);
    }
    //清空數組clear
    collection.clear();
    System.out.println(collection);
    }

}

Iterator介面

Iterator介面有兩個常用的方法

boolean hasNext() 如果仍有元素可以迭代,則返回true 用來判斷集合中還有沒有下一個元素,

E next() 返回迭代的下一個元素

取出集合中的下一個元素

Iterator迭代器,是一個介面,無法直接使用,獲取Iterator介面實現類的對象,可以通過Collection介面中的方法iterator();這個方法返回的就是迭代器的實現類對象

迭代器的使用步驟:

1.使用Collection集合中的方法iterator()獲取迭代器的實現類對象,使用Iterator介面來接收

2.使用Iterator介面中的方法hasNext判斷還有沒有下一個元素

3.使用Iterator介面中的方法next取出集合的下一個元素

import java.util.*;
public class IteratorDemo{
    public static void main(String[] args){
    //可以使用多態來使用這個方法
    Collection<String> collection = new ArrayList<>();
    collection.add("李商隱");
    collection.add("李清照");
    collection.add("王安石");
    collection.add("蘇軾");
    collection.add("白居易");
    //使用迭代器取出集合中的元素
    //首先要獲得一個Iterator的實現類,可以使用方法iterator來獲取
    Iterator<String> aIterator = collection.iterator();
    //判斷集合有沒有元素
    while(aIterator.hasNext()){
    String str = aIterator.next();
    System.out.println(str);
    }
    }
}

增強for迴圈

Collection介面繼承了Iterable介面,是JDK1.5之後出現的新特性。

格式

for(集合 變數名 : 集合名){}

import java.util.*;
public class ForeachDemo{
    public static void main(String[] args){
    ArrayList<String> arraylist = new ArrayList<>();
    arraylist.add("雲想衣裳花想容, ");
    arraylist.add("春風拂檻露華濃。 ");
    arraylist.add("若非群玉山頭見,");
    arraylist.add("會向瑤臺月下逢。 ");
    
    for(String a : arraylist){
        System.out.println(a);
    }
    }
}

泛型

泛型是一種未知的數據類型

定義含有泛型的類

public class GenericDemo<E>{
    private E e;
    
    public void setName(E e){
        this.e = e;
    } 
    
    public E getName(){
        return e;
    }
}
public class GenericDemoa{
    public static void main(String[] args){
    GenericDemo<String> gd = new GenericDemo<>();
    gd.setName("李白");
    String str = gd.getName();
    System.out.println(str);
    }
}
//定義含有泛型的方法
public class GenericDemob{
    public <E> void method1(E e){
        System.out.println(e);
    }
    
    public static <E> void method2(E e){
        System.out.println(e);
    }
}
public class GenericDemoc{
    public static void main(String[] args){
    GenericDemo1 gd1 = new GenericDemo1();
    gd1.method1(123);
    gd1.method1("雲想衣裳花想容");
    gd1.method1(8.8);
    
    GenericDemo1.method2("春風拂檻露華濃");
    }
}

泛型通配符

public static void main(String[] args){
    
     Collection<Integer> list1 = new ArrayList<Integer>();
     Collection<String> list2 = new ArrayList<String>();
     Collection<Number> list3 = new ArrayList<>(Number);
     Collection<Object> list4 = new ArrayList<Object>();
    /*
    類與類之間的繼承關係 Integer extends Number extends Object
    
    String extends Objects
    */
    getElement1(list1);//編譯通過,是Number的子類
    getElement1(list2);//報錯,不是Number的子類
    getElement1(list3);//編譯通過,是Number本身
    getElement1(list4);//報錯,不是Number的子類
    
    getElement2(list1);//報錯
    getElement2(list2);//報錯
    getElement2(list3);
    getElement2(list4);{
}
    //泛型的上限:此泛型?,必須是Number類型或者Number類型的子類
public static void getElement1(Collection<? extends Number> coll){}
   //泛型的下限:此泛型? ,必須是Number類型或者Number類型的父類 
public static void getElenment2(Collection<? super Number> coll)

做了一個鬥地主的游戲,這個案例分析是看視頻的,看完分析後,代碼是我自己寫的,寫的好差,想的也久,寫了2個小時了吧,終於完成了

package demo12;

import java.util.ArrayList;
//做一個鬥地主的游戲,有3個玩家,一個底牌
public class doudizhu {
    public static void main(String[] args) {
        //創建玩家集合,包含了底牌
        Players aplayers = new Players();
        //這個集合用來裝54張牌
        ArrayList<String> pokerArray = new ArrayList<>();
        //這個集合用來裝牌的顏色,裝好了之後,要跟牌的號碼進行組合
        ArrayList<String> color = new ArrayList<String>();
        color.add("♠");
        color.add("♥");
        color.add("♣");
        color.add("♢");
        //這個集合用來裝撲克牌的數字
        ArrayList<String> number = new ArrayList<String>();
        number.add("2");
        number.add("A");

        //生成撲克牌
        for (int i = 2; i < 13; i++) {
            int j = i + 1;
            String str = j + "";
            number.add(str);
        }
        for (int i = 0; i < color.size(); i++) {
            for (int j = 0; j < number.size(); j++) {
                String str1 = color.get(i) + number.get(j);
                pokerArray.add(str1);
            }
        }
        //把大小王添加到pokerArray集合中去,到這裡牌生成完畢
        pokerArray.add(0, "大王");
        pokerArray.add(1, "小王");
        //傳遞集合
        aplayers.play(pokerArray);
    }

}
import java.util.ArrayList;
import java.util.Collections;

public class Players {
    public void play(ArrayList<String> arrayList) {
        //把傳進來的集合打亂排序
        Collections.shuffle(arrayList);
        //玩家的集合
        ArrayList<String> player1 = new ArrayList<String>();
        ArrayList<String> player2 = new ArrayList<String>();
        ArrayList<String> player3 = new ArrayList<String>();
        ArrayList<String> player4 = new ArrayList<String>();
        //發牌
        for(int i=0;i<arrayList.size();i++) {
            //為什麼要減三,因為要把三張牌添加到底牌去,把索引51,52,53的牌添加到底牌去
            if(i%3==0&&i<arrayList.size()-3){
                String p1=arrayList.get(i);
                player1.add(p1);
            }else if(i%3==1&&i<arrayList.size()-2){
                String p2 =arrayList.get(i);
                player2.add(p2);
            }else if(i%3==2&&i<arrayList.size()-2){
                String p3 = arrayList.get(i);
                player3.add(p3);
            }else{
                String p4 = arrayList.get(i);
                player4.add(p4);
            }
        }
        //顯示牌
        System.out.println(player1);
        System.out.println(player2);
        System.out.println(player3);
        System.out.println(player4);
    }
}

數據機構

棧:先進後出,只有一個入口和出口

img

隊列:先進先出,一個入口,一個出口img

數組:數組中的地址是連續的 ,可以直接根據索引值查詢,,查詢快,增刪慢

鏈表:查詢慢:鏈表中的地址不是連續的,每次查詢都必須從頭開始查詢

增刪快:鏈表結構,增加或刪除一個元素,對鏈表的整體結構沒有影響,所以增刪快

紅黑樹:查詢速度非常快

List集合

`

import java.util.*;
//List集合繼承自Collection介面
//List集合是一個有序的集合,存進去的是1,2,3取出來的也是1,2,3
//List集合可以存儲重覆的元素
//List集合是一個帶索引的集合
public class ListDemo{
    public static void main(String[] args){
    //看一看List集合的常用方法吧
    //List集合是一個介面需要使用多態來調用其方法
    List<String> aList = new ArrayList<>();
    aList.add("雲想衣裳花想容, ");
    aList.add(" 春風拂檻露華濃。");
    aList.add("若非群玉山頭見, ");
    //將指定的元素,添加都改集合中的指定位置上
    aList.add(3,"會向瑤臺月下逢。 ");
    //返回集合中指定位置的元素
    String str1 = aList.get(0);
    System.out.println(str1);
    //移除列表中指定位置的元素,返回的是被移除的元素
    String str2 = aList.remove(1);
    System.out.println(str2);
    //用指定元素替換集合中指定位置的元素,返回值的更新前的元素
    String str3 = aList.set(1,"春風不度玉門關");
    System.out.println(str3);
    System.out.println(aList);//[雲想衣裳花想容, , 春風不度玉門關, 會向瑤臺月下逢。 ]
    
    
    //遍歷集合
    for(int i = 0;i<aList.size();i++){
        String str = aList.get(i);
        System.out.println(str);
    }
    
    //迭代器List集合的iterator方法會返回一個Iterator介面的實現類
    Iterator<String> iterator = aList.iterator();
    //先判斷有沒有下一個元素
    while(iterator.hasNext()){
        String str5 = iterator.next();
        System.out.println(str5);
    }
    
    for(String s : aList){
        System.out.println(s);
    }
    
    

    
    
    
    
    }
}

List集合的子類

ArrayList集合:元素增刪慢,查找快,看用於查詢數據,遍曆數據

LinkedList集合:

LinkedList集合的常用方法

addFirst(E e);將指定元素插入列表開頭

addLast(E e);將指定元素添加到列表結尾

push(E e);將元素推入次列表所表示的堆棧,相等於addFirst

getFirst();返回次列表的第一個元素

getLast();返回此列表的最後一個元素

removeFirst();移除此列表的第一個元素

removeLast();移除此列表的最後一個元素

pop();等效於removeFirst

isEmpty();判斷集合是否包含元素,有則返回false,沒有則true


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 所屬網站分類: python基礎 > 語法,變數,運算符 作者:goodbody 鏈接: http://www.pythonheidong.com/blog/article/12/ 來源:python黑洞網 www.pythonheidong.com 很多人以為Python是沒有三元運算符的,但實際 ...
  • 1,重載是 C 語言到 C++ 語言的一個飛躍,C 語言中沒有重載的概念,所有的函數 名是不允許有重覆的,在 C++ 中因為引進了重載,所以函數名可以重覆; 2,自然語言中的上下文: 1,你知道上面辭彙中“洗”字的含義嗎? 1,不同的動詞和名次搭配的含義是不同的; 2,結論: 1,能和“洗”字搭配的 ...
  • 工作之餘在知乎上偶然看到一篇回帖,瞬間覺得之前看的那麼多資料都不及這一篇讓我對 websocket 的認知深刻易懂,之前看總完總覺得一知半解雲里霧裡。所以與大家共同分享一下一起學習。比較喜歡這種博客理論和小故事的事例結合,讀起來很輕鬆,不枯燥。廢話不多說了,進入正題了~ 一、websocket與ht ...
  • 發佈與訂閱消息系統 在正式討論Apache Kafka (以下簡稱Kafka)之前,先來瞭解發佈與訂閱消息系統的概念, 並認識這個系統的重要性。數據(消息)的發送者(發佈者)不會直接把消息發送給接收 者,這是發佈與訂閱消息系統的一個特點。發佈者以某種方式對消息進行分類,接收者 (訂閱者)訂閱它們,以 ...
  • [toc] 這篇文章主要講 map 的賦值、刪除、查詢、擴容的具體執行過程,仍然是從底層的角度展開。結合源碼,看完本文一定會徹底明白 map 底層原理。 我要說明的是,這裡對 map 的基本用法涉及比較少,我相信可以通過閱讀其他入門書籍瞭解。本文的內容比較深入,但是由於我畫了各種圖,我相信很容易看懂 ...
  • JVM記憶體分為哪幾部分?各個部分的作用是什麼? JVM記憶體分為哪幾部分?各個部分的作用是什麼? JVM記憶體分為哪幾部分?各個部分的作用是什麼? JVM記憶體分為哪幾部分?各個部分的作用是什麼? 1. Java虛擬機記憶體的五大區域 Java的運行離不開Java虛擬機的支持,今天我就跟大家探討一下Java ...
  • 厲害了,2019/05/21 Apache軟體基金會發表博文,宣佈 Dubbo 在 2019/05/20 這天正式畢業,成為 Apache 的頂級項目。 參考:https://blogs.apache.org/foundation/entry/the apache software foundati ...
  • 14.1 基本介紹 -Scala飾運行在Java虛擬機(Java Virtual Machine)之上,因此具有如下特點 1) 輕鬆實現和豐富的Java類庫互聯互通 2) 它既支持面向對象的編程方式,又支持函數式編程 3) 它寫出的程式像動態語言一樣簡潔,但事實上它確是嚴格意義上的靜態語言 14.2 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...