国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java基礎(chǔ)-集合+泛型+枚舉

這篇具有很好參考價值的文章主要介紹了java基礎(chǔ)-集合+泛型+枚舉。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

概覽

java基礎(chǔ)-集合+泛型+枚舉,java,java,開發(fā)語言
說明:

  • 集合框架是一個類庫的集合,里面還有很多接口。里面虛框都是接口。
  • 全部在java.util
  • HashSet是基于HashMap實現(xiàn)的。
  • TreeSet是一個有序Set。
  • ArrayList能快速隨機訪問,可變大小。
  • LinkedList隨機訪問相對慢,但是可以當作stack或者queue來用。

Collection接口常用方法

java基礎(chǔ)-集合+泛型+枚舉,java,java,開發(fā)語言

public void contextLoads() {
	ArrayList list1 = new ArrayList();
	ArrayList list2 = new ArrayList();
	list1.add("one");
	list1.add(2); // 沒有指定集合的數(shù)據(jù)類型,也不會報錯
	list2.addAll(list1);
	list2.add(3.14);
	Iterator it1 = list2.iterator(); // 獲取迭代器
	while (it1.hasNext()) { // 迭代器是否有下一個?
		System.out.print(it1.next() + " "); // 迭代器指向的值
	} // one 2 3.14
	list2.remove(1); // 按index
	list2.removeAll(list1); // 刪掉list1中有的元素
	System.out.println("delete list1, size: " + list2.size()); // 大小
	
}

ArrayList類

下面是List接口常用的方法:
java基礎(chǔ)-集合+泛型+枚舉,java,java,開發(fā)語言

使用的時候直接:

List<String> li = new ArrayList<String>(); 
  • 指定元素類型比較好。因為不指定的話,默認是Object類型,那么get()返回的也是Object,還要轉(zhuǎn)換成期望的數(shù)據(jù)類型。
  • 這里其實是使用接口List,引用了一個ArratList實例。
  • 這里指定類型,其實用到了Java提供的泛型特性。泛型可以在編譯的時候檢查類型安全,并且自動隱式轉(zhuǎn)換一些類型。比如:使用Map的get()方法,這里隱式轉(zhuǎn)換為Book類型,由于Book里重寫了public String toString(),所以可以直接打印想要的格式。
Map<Integer,Book> books=new HashMap<Integer,Book>(); //定義泛型 Map 集合
System.out.println(books.get(id));

LinkedList類

  • 采用鏈表結(jié)構(gòu)保存對象,所以適合頻繁插入刪除元素時使用。
  • 隨機訪問會慢。
  • 具有Collection接口和List接口提供的方法。
    java基礎(chǔ)-集合+泛型+枚舉,java,java,開發(fā)語言

set

遍歷:

Set<Integer> set;
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
	iterator.next();
}
for (int item : set) {
	System.out.println(item);
}

HashSet類

  • 向Set集合中添加新元素時,HashSet會調(diào)用該元素的hashCode()方法,獲取哈希碼,根據(jù)哈希碼計算出元素在集合中的存儲位置。
  • 后添加的相同元素會覆蓋前一個。就算是null,也只能有一個。
  • HashSet也實現(xiàn)了Collection接口!里面的方法都可以用!

TreeSet類

  • 只能對實現(xiàn)了Comparable接口的類對象進行排序。
  • 升序
  • 要使用排序功能,需要添加相同數(shù)據(jù)類型的對象,不然拋出ClassCastException 異常。
  • 除了Collection接口的方法外,還有:
    java基礎(chǔ)-集合+泛型+枚舉,java,java,開發(fā)語言

HashMap

  • HashMap按照哈希算法存取對象,TreeMap則是對key進行了排序,方法是一樣的。
  • Map接口常用方法
    java基礎(chǔ)-集合+泛型+枚舉,java,java,開發(fā)語言
Map<Integer, StringBuilder> m = new HashMap<>();
m.put(j, m.get(j).append(temp.charAt(j)));
// 不用先刪除再add

HashMap<String, String> users=new HashMap<String, String>();
users.put("11","張浩太");    //將學生信息鍵值對存儲到Map中
users.put("22","劉思誠");
users.put("33","王強文");
users.put("44","李國量");
users.put("55","王路路");
        
Scanner input=new Scanner(System.in);
System.out.println("請輸入要刪除的學號:");
int num=input.nextInt();
if(users.containsKey(String.valueOf(num))) {  
    users.remove(String.valueOf(num)); // 以key刪除一個元素
} else {
    System.out.println("該學生不存在!");
}
System.out.println("******** 學生列表 ********");
Iterator it=users.keySet().iterator(); // 使用迭代器
while(it.hasNext()) {
    String key = (String)it.next(); // it.next()返回的是Object,需要強制轉(zhuǎn)換
    String val = users.get(key);
    System.out.println("學號:"+key+",姓名:"+val);
}
// 遍歷Map
Map<String, String> map = new HashMap<String, String>();
//第三種:推薦,尤其是容量大時
System.out.println("通過Map.entrySet遍歷key和value");
for (Map.Entry<String, String> entry : map.entrySet()) {
   System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}

如果遍歷時需要同時取出key和val,那么盡量用entrySet()代替先取key再查val(尤其是key比較復雜的時候)

Collection常用算法

Collections.sort(名稱):升序排序

Collections.reverse(名稱):反轉(zhuǎn)

Collections.copy(destList,srcList):復制
如果destList長度不夠,IndexOutOfBoundsException;長度夠的話,復制到開頭,剩余元素不影響。

Collections.fill(List<? super T> list,T obj) //使用指定元素替換指定列表中的所有元素

泛型

除去Collection對泛型的支持(指定數(shù)據(jù)類型后編譯時自動轉(zhuǎn)換),另外還有泛型類和泛型方法。

泛型類

public class class_name<data_type1,data_type2,>{
	private data_type1 name1;
}

實例

public class Stu<N,A,S> {
	private N name;
	private A age;
	private S sex;
	public Stu(N name, A age, S sex) {
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	//下面是上面3個屬性的setter/getter方法
	// 就是記住全部用聲明里指出的類型來代替。就好像Template
}
Stu<String, Integer, Character> stu = new Stu<String, Integer, Character>("Ann", 30, '女'); // Integer才是類,int是基本數(shù)據(jù)類型
String name=stu.getName();
Integer age=stu.getAge();
Character sex=stu.getSex();
System.out.println("學生姓名:"+name+",年齡:"+age+",性別:"+sex);

泛型方法

  • 泛型方法可以獨立于類產(chǎn)生變化。泛型方法所在的類不一定是泛型類。如果使用泛型方法就可以取代類的泛型化,那么就應(yīng)該只使用泛型方法。
  • static方法無法訪問泛型類的類型參數(shù)(N,A,S這些),也就是說,泛型類里static方法是很難用的,所以如果static方法需要泛型能力,就必須變成泛型方法。

[訪問權(quán)限修飾符][static][final]<類型參數(shù)列表>返回值類型 方法名([形式參數(shù)列表])

高級用法

  1. 限制泛型可用類型
    Java默認是可以使用任何類型來實例化一個泛型對象的,但是也可以限制能用泛型的類型
    class 類名稱<T extends anyClass>
    比如:
public class ListClass<T extends List> {
}
// 在main中測試:
ListClass<ArrayList> lc1 = new ListClass<ArrayList>();
ListClass<LinkedList> lc2=new ListClass<LinkedList>();
ListClass<HashMap> lc3=new ListClass<HashMap>();
// 這個HashMap沒有實現(xiàn)List接口,所以這個實例化會報錯
  1. 使用類型通配符
    語法:泛型類名稱<? extends List>a=null;
A<? extends List>a=null;
a=new A<ArrayList> ();    //正確
b=new A<LinkedList> ();    //正確
c=new A<HashMap> ();    //錯誤
  1. 繼承泛型類和實現(xiàn)泛型接口
    定義為泛型的類可以被繼承,如果要保留父類的泛型類型,需要在繼承時指定。而且泛型父類不能強制轉(zhuǎn)換成泛型子類,因為子類需要的類型并沒有被填滿。
public class FatherClass<T1>{}
public class SonClass<T1,T2,T3> extends FatherClass<T1>{}
可以在泛型中實現(xiàn)接口:
interface interface1<T1>{} 
interface SubClass<T1,T2,T3> implements Interface1<T2>{}

枚舉

JDK1.5之前沒有enum,一般用接口常量替代。

語法:

[public|private|internal] enum 名稱[:基礎(chǔ)類型]
{
    枚舉成員; // 不能重名,常數(shù)值必須在基礎(chǔ)類型之內(nèi),多個用逗號分隔
}

如果沒有顯示聲明基礎(chǔ)類型,那么基礎(chǔ)類型就是int

使用時:枚舉類型名稱.枚舉成員名稱

枚舉類

  • 枚舉類繼承自java.lang.Enum。
  • 定義一個枚舉類型時,每個成員都可以看作Enum類的實例。
public class DbApplicationTests {
	enum Signal
	{
		GREEN, YELLOW, RED;
	}
	public void compare(Signal s) {
		for (Signal i: Signal.values()) { // 返回枚舉類型所有值
			System.out.println(s+"比較"+i+":"+s.compareTo(i)); 
			// 返回索引差值,找不到的拋異常
		} // i.ordinal()可以獲取索引值
	}
	@Test
	public void contextLoads() {
		try {
		    compare(Signal.valueOf("RED")); 
		// 把普通字符串轉(zhuǎn)為枚舉實例
		    /*
		     * RED比較GREEN:2 實際就是2-0
		     * RED比較YELLOW:1
		     * RED比較RED:0
		     */
		    compare(Signal.valueOf("BLUE")); // 找不到哦
		} catch(IllegalArgumentException e) {
			System.out.println(e);
			/*
			 * java.lang.IllegalArgumentException: 
			 *  No enum constant com.example.demo.DbApplicationTests.Signal.BLUE
			 */
		}
	}
}

枚舉類里面也可以添加方法,就類似普通類。

java.util中還有EnumMap和EnumSet。文章來源地址http://www.zghlxwxcb.cn/news/detail-831160.html

//定義數(shù)據(jù)庫類型枚舉
public enum DataBaseType
{
    MYSQL,ORACLE,DB2,SQLSERVER
}
//某類中定義的獲取數(shù)據(jù)庫URL的方法以及EnumMap的聲明
private EnumMap<DataBaseType,String>urls=new EnumMap<DataBaseType,String>(DataBaseType.class);
public DataBaseInfo()
{
    urls.put(DataBaseType.DB2,"jdbc:db2://localhost:5000/sample");
    urls.put(DataBaseType.MYSQL,"jdbc:mysql://localhost/mydb");
    urls.put(DataBaseType.ORACLE,"jdbc:oracle:thin:@localhost:1521:sample");   
 urls.put(DataBaseType.SQLSERVER,"jdbc:microsoft:sqlserver://sql:1433;Database=mydb");
}
//根據(jù)不同的數(shù)據(jù)庫類型,返回對應(yīng)的URL
//@param type DataBaseType 枚舉類新實例
//@return
public String getURL(DataBaseType type) {
    return this.urls.get(type);
}

到了這里,關(guān)于java基礎(chǔ)-集合+泛型+枚舉的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java筆記(集合、散列表、Map、泛型)

    Java筆記(集合、散列表、Map、泛型)

    set:無序不可重復 無序:不保證有序,就是有可能有序,有可能無序 不可重復:不能添加重復數(shù)據(jù) HashSet TreeSet:底層是紅黑樹,會自動排序,意味著里面存儲的必須是同類型的元素對象 數(shù)字:從小到大排序 字符串:一次比較每一位的ascll碼值 日期:自然日期順序 1.1.TreeS

    2024年02月19日
    瀏覽(17)
  • Java開發(fā)基礎(chǔ)系列(十三):集合對象(Set接口)

    Java開發(fā)基礎(chǔ)系列(十三):集合對象(Set接口)

    ?? @ 作者: 一恍過去 ?? @ 主頁: https://blog.csdn.net/zhuocailing3390 ?? @ 社區(qū): Java技術(shù)棧交流 ?? @ 主題: Java開發(fā)基礎(chǔ)系列(十三):集合對象(Set接口) ?? @ 創(chuàng)作時間: 2023年07月27日 HashSet: 基于哈希表實現(xiàn)的集合,不保證元素的順序。 LinkedHashSet: 基于哈希表和雙向鏈表實現(xiàn)的

    2024年02月15日
    瀏覽(49)
  • springboot第49集:【思維導圖】多線程,常用類與基礎(chǔ)API,集合框架,泛型,數(shù)據(jù)結(jié)構(gòu)源碼...

    springboot第49集:【思維導圖】多線程,常用類與基礎(chǔ)API,集合框架,泛型,數(shù)據(jù)結(jié)構(gòu)源碼...

    多線程創(chuàng)建方式一:繼承Thread類 多線程創(chuàng)建方式二:實現(xiàn)Runnable接口 jdk5.0新增兩種創(chuàng)建多線程的方式 image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png 優(yōu)先級 image.png image.png image.png image.png image.png image.png 線程安全問題 image.p

    2024年01月21日
    瀏覽(19)
  • 從零開始學習 Java:簡單易懂的入門指南之泛型及set集合(二十二)

    從零開始學習 Java:簡單易懂的入門指南之泛型及set集合(二十二)

    1.1泛型概述 泛型的介紹 ? 泛型是JDK5中引入的特性,它提供了編譯時類型安全檢測機制 泛型的好處 把運行時期的問題提前到了編譯期間 避免了強制類型轉(zhuǎn)換 泛型的定義格式 類型: 指定一種類型的格式.尖括號里面可以任意書寫,一般只寫一個字母.例如: 類型1,類型2…: 指定多

    2024年02月09日
    瀏覽(42)
  • Rust語法: 枚舉,泛型,trait

    這是我學習Rust的筆記,本文適合于有一定高級語言基礎(chǔ)的開發(fā)者看不適合剛?cè)腴T編程的人,對于一些概念像枚舉,泛型等,不會再做解釋,只寫在Rust中怎么用。 枚舉的定義與賦值 枚舉的定義格式如下: enum 枚舉名{ 值1(附加類型), 值2(附加類型),… } 其中,關(guān)聯(lián)類型可以省去

    2024年02月13日
    瀏覽(23)
  • 第十三章,枚舉與泛型例題

    第十三章,枚舉與泛型例題

    例題1 結(jié)果 ? 例題2 結(jié)果 ? 例題3 結(jié)果? ? ?例題4 結(jié)果 例題5 ?結(jié)果 例題6 ?結(jié)果 例題7 ?結(jié)果 例題8 ?結(jié)果

    2024年02月06日
    瀏覽(31)
  • C 語言結(jié)構(gòu)體和枚舉完全指南:成員訪問、字符串操作、枚舉基礎(chǔ)

    要訪問結(jié)構(gòu)體的成員,請使用點語法 (.): 現(xiàn)在您可以使用只使用一個結(jié)構(gòu)體,輕松創(chuàng)建多個具有不同值的結(jié)構(gòu)體變量: 請記住,C 語言中的字符串實際上是字符數(shù)組,不幸的是,您無法像這樣為數(shù)組分配值: 會發(fā)生錯誤: prog.c:12:15: error: assignment to expression with array type 但是,

    2024年02月02日
    瀏覽(27)
  • Java語言-----泛型的認識

    Java語言-----泛型的認識

    目錄 一.什么是泛型 二.泛型類的使用 2.1泛型類的定義 ?2.2泛型類的數(shù)組使用 三.泛型的上界? 四.泛型的方法 五.泛型與集合 ??個人主頁:?tq02的博客_CSDN博客-C語言,Java領(lǐng)域博主 ???夢的目標:努力學習,向Java進發(fā),拼搏一切,讓自己的未來不會有遺憾。 ???歡迎各位→點

    2023年04月23日
    瀏覽(24)
  • java基礎(chǔ)——泛型

    看下面這段代碼: 如果沒有泛型,要實現(xiàn)不同類型的加法,每種類型都需要重載一個add方法;通過泛型,我們可以復用為一個方法: 泛型中的類型在使用時指定,不需要強制類型轉(zhuǎn)換( 類型安全 ,編譯器會 檢查類型 ) 下面這段代碼: 我們在使用上述list中,list中的元素都

    2024年02月15日
    瀏覽(22)
  • Java基礎(chǔ)篇——反射&枚舉

    B友:https://www.bilibili.com/video/BV1QG4y1J76q/ VIP服務(wù)課程 :https://edu.51cto.com/course/32767.html 當程序要使用某個類時,如果該類還未被加載到內(nèi)存中,則系統(tǒng)會通過類的【加載】,【連接】,【初始化】 這三個步驟來對類進行初始化。 如果不出現(xiàn)意外情況,JVM將會連續(xù)完成這三個步

    2024年02月12日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包