日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中的集合框架_JAVA中的集合框架(上)List

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中的集合框架_JAVA中的集合框架(上)List 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一節 JAVA中的集合框架概述

集合的概念,現實生活中:很多事物湊在一起就是一個集合;數學中的集合:具有相同屬性事物的總體;JAVA中的集合:是一種工具類,就像是容器,儲存任意數量的具有共同屬性的對象。集合的作用:在類的內部,對數據進行組織(如果有些屬性類型相同,但意義與作用不同,咱們就不能把它們放到集合,如學生的姓名和性別屬性),簡單而快速的搜索大數量的條目。

有的集合接口,提供了一系列排列有序的元素,并且可以在序列中間快速的插入或者刪除有關元素;

有的集合接口,提供了映射關系,可以通過關鍵字key去快速查找到對應的唯一對象,而這個關鍵字可以是任意類型。

集合其實就是用來承裝其它對象的容器。

與數組相比,為何選擇集合而不是數組?數組的長度固定,還得復制,集合的長度可變。數組只能通過數組下標訪問元素,類型固定,而有的集合可以通過任意類型查找所映射的具體對象,數組還要遍歷元素比較麻煩。

集合的框架體系結構:

將collection想象成單身宿舍,三個子接口。

1.List(序列):排列有序,可重復

2.Queue(隊列):排列有序,可重復

3.set(集):無序,不可重復

將map當成成對出現,Collection 是存儲的一個一個的對象,而Map提供映射的關系,內部以的Key,Value兩個對象為一個映射來存儲數據,Entry類(鍵值對)是Map的內部類,Key,Value就是Entry的實例,key和value可以是任意類型的對象。兩個根接口:Collection和Map,Collection的子接口有:List序列(有序可重復)、Queue隊列、Set集(無序不可重復)。實現類分別:ArrayList數組序列,LinkedList鏈表也是List的接口實現類,HashSet哈希集;Map的實現類有:HashMap哈希表。

在Collection或Map內部是如何存儲對象呢?在每一個Collection類中,存儲的就是一個個獨立的對象,而Map內部有些特殊。有些集合內部能提供一種映射的關系,就是指Map類,在Map類的內部,一個key一個value兩個對象為一個映射去存儲數據,這樣的一個映射就是Entry類的實例,這個Entry類是Map類的一個內部類,咱們把它翻譯成鍵值對,一個鍵一個值,兩個湊成映射的一對,其中key和value可以是任意類型的對象。

在Collection和Map眾多子接口和實現類當中,ArrayList、HashSet、HashMap使用最多的三個實現類

第二節 Collection接口List接口簡介

Collection接口、子接口及其實現類,Collection接口是java框架中的根接口,也是List、Set和Queue接口的父接口;定義了很多方法,可用于操作List、Set和Queue的方法,對集合的增刪改查,可在API中查看Collection的介紹和方法。

List接口和其實現類 ArrayList

1.List是元素有序并且可以重復的集合,被稱為序列

2.List可以精確的控制每個元素的插入位置,或刪除某個指定位置的元素

3.ArrayList 數組序列,是List的一個重要實現類

4.ArrayList底層是由數組實現的

第三節 學生選課--創建學生類和課程類

/**

* 課程類

* Created by Administrator on 2017/4/2.

*/

public class Course {

private String id;

private String name;

public String getId() {

return id;

}

public String getName(){

return name;

}

public void setId(String id){

this.id=id;

}

public void setName(String name) {

this.name = name;

}

public Course(String id,String name){

this.id=id;

this.name=name;

}

}

import java.util.HashSet;

import java.util.Set;

/**

* 學生類

* Created by Administrator on 2017/4/2.

*/

public class Student {

private String id;

private String name;

public Set courses;

//課程信息存放在set屬性里,和list一樣是一個子接口

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Student(String id,String name){

this.id=id;

this.name=name;

this.courses=new HashSet();

//構造方法里不能直接實例化,因為set是一個接口,通過HashSet()對courses實例化,HashSet是一個重要的實現類

}

}

第四節 學生選課--添加課程I

在這里注意在List中添加元素,如果插入位置如果大于容量的長度就會報越界異常,如等于容量會在隊尾添加一個,小于0也會報錯。

import java.util.ArrayList;

import java.util.List;

/**

* 添加課程

* Created by Administrator on 2017/4/2.

*/

//既然學生要選課就要存放備選課程,用一個List容器來存放備選課程

public class ListTest {

//新建ListTest類

//創建一個List類型的屬性,用于存放備選課程的容器List

public List courseToSelect;

//給類添加一個構造方法

public ListTest(){

this.courseToSelect=new ArrayList();

//因為List是一個接口,咱們不能直接將它實例化,這里就引入了ArrayList來實現接口的實例化

}

//用于往courseToSelect添加課程對象

public void testAdd(){

//首先要有一個課程對象的實例

Course cr1=new Course("1","數據結構");

//調用add方法添加

courseToSelect.add(cr1);

//打印輸出 courseToSelect.get(0)的數據

//當一個對象存入集合后它就變成了Object類型的數據取出時就要把類型轉換回來

Course temp=(Course) courseToSelect.get(0);

System.out.println("成功添加課程:"+temp.getId()+":"+temp.getName());

Course cr2=new Course("2","C語言");

//重載的add方法可以指定位置添加元素

courseToSelect.add(0,cr2);

Course temp2=(Course) courseToSelect.get(0);

System.out.println("成功添加課程:"+temp2.getId()+":"+temp2.getName());

}

//調用main方法測試

public static void main(String[] args) {

ListTest lt=new ListTest();

lt.testAdd();

}

}

第五節 添加課程II

add和addAll分別各有兩個方法,參數不同。其中addAll 需要先把數組轉換成list Arrays.asList();這個方法也是有兩種用法,可以指定位置添加元素。

Course[] cr3={new Course("3","離散數學"),new Course("4","匯編語言")};

//創建一個課程數組

//調用addAll把數組添加進去,但是這兒的參數要是Collection的實例,

// 就需要把數組轉換成List,用Arrays.asList()方法

courseToSelect.addAll(Arrays.asList(cr3));

//輸出

Course temp3=(Course)courseToSelect.get(2);

Course temp4=(Course)courseToSelect.get(3);

System.out.println("成功添加課程:"+temp3.getId()+":"+temp3.getName()+";"

+temp4.getId()+":"+temp4.getName());

Course[] cr4={new Course("5","高等數學"),new Course("6","大學英語")};

courseToSelect.addAll(2,Arrays.asList(cr4));

Course temp5=(Course)courseToSelect.get(2);

Course temp6=(Course)courseToSelect.get(3);

System.out.println("成功添加課程:"+temp5.getId()+":"+temp5.getName()+";"

+temp6.getId()+":"+temp6.getName());

}

第六節 學生選課--課程查詢

get方法可以取到指定位置的元素,如果想取出每一個則可以使用for循環來遍歷List,由于List中的數據類型是Object,再輸出時需要強制轉換下類型。長度集合.size()方法。

/**

* 定義方法循環遍歷List中的元素

*/

public void test1(){

System.out.println("使用for循環遍歷List中一共有以下課程");

for(int i=0;i

//因為類型不同需要強制類型轉換

System.out.println("課程:"+((Course)courseToSelect.get(i)).getId()+":"+

((Course)courseToSelect.get(i)).getName());

}

}

public void test2(){

System.out.println("使用foreach循環遍歷List中一共有以下課程");

for(Object obj:courseToSelect){

//因為類型不同需要強制類型轉換

System.out.println("課程:"+((Course)obj).getId() +":"+((Course)obj).getName());

}

}

接下來還可以試驗下List的重復性問題,List中可以重復元素

還有一種的特殊遍歷方法,是通過迭代器來遍歷集合中的元素 Iterator

Iterator就是迭代器的意思,在Collection接口中定義了iterator方法,通過這個方法可以返回一個當前集合對象的迭代器,再通過這個迭代器去遍歷集合中的每個元素,Iterator本身也是一個接口。迭代器本身只是用來遍歷元素的,它自己不具備任何存儲的功能,可以理解為迭代器依賴于某個集合而存在,本身不能獨立存在。

public void test3(){

System.out.println("通過迭代器遍歷集合中元素,共有以下課程:");

//通過集合的iterator方法來創建迭代器的實例

Iterator it=courseToSelect.iterator();

//遍歷元素如有元素則輸出它的真值

while(it.hasNext()){

Course cr=(Course) it.next();

System.out.println("課程:"+cr.getId()+":"+cr.getName());

}

}

第七節 學生選課--課程修改

如何修改List張的元素?用set方法,用指定元素替換列表中指定位置的元素。

set(int index,E element)

參數,要替換元素的索引,要在指定位置存儲的元素

courseToSelect.set(4, new Course("7","毛概"));

第八節 學生選課--課程刪除

刪除List中的元素,刪除的方法有remove 和removeAll方法

remove(int index)移除列表中指定位置的元素

remove(object o)此列表中移除第一次出現的指定元素(如果存在)

removeAll(Collection> c)從此列表中移除指定Collection中包含的其所有元素,在某個集合中將另一個集合中的所有元素完全刪除,注意要將數組轉換成List——Arrays.asList();

public void test5(){

Course[] courses={(Course)courseToSelect.get(4),(Course)courseToSelect.get(5)};

courseToSelect.removeAll(Arrays.asList(courses));

courseToSelect.remove(0);

courseToSelect.remove(courseToSelect.get(0));

}

第九節 學生選課--應用泛型管理

是否有方法可以控制我往某個List或某個集合中添加元素的類型呢?

這時我們就要用到泛型。

泛型:集合中的元素,可以是任意類型的對象(對象的引用),集合里儲存的都是一個個引用,它們都是指向某個具體的對象的。如果把某個對象放入集合,則會忽略他的類型,僅僅把它當做Object來處理,取出也是把它當做Object來取出。泛型則是規定了某個集合只能存放特定類型的對象,并且會在編譯期間對其進行類型檢查,可以直接按指定類型獲取出集合中的元素,這樣我們在后續獲取并使用時不用因為Object類型再去強制轉換了,直接就能使用。

public class ListText {

public List courses;

public ListText(){

this.courses=new ArrayList();

}

}

第十節 應用泛型管理課程

其實在泛型集合中,除了可以保存泛型類型的對象實例,還可以存入泛型的子類型的對象實例。泛型集合可以添加泛型子類型的對象實例,泛型不能是基本類型,必須是引用類型,如果非要用基本類型,可以通過使用包裝類限定允許存入的基本數據類型。int Integer long Long boolean Boolean泛型是基本類型的包裝類的實例化 舉例:

List< Integer > list=new ArrayList < Integer > ();

第十一節 通過Set集合來管理課程

Set接口及其實現類——HashSet,Set是元素無序并且不可以重復的集合,被稱為集,HashSet——哈希集,是Set的一個重要實現類,Set沒有提供方法去修改某個位置上的元素,由于List有序,Set無序且不可重復,所以Set不可能提供一個指定索引位置,去修改相應元素的辦法。沒有set()方法,一樣有add addAll remove removeAll size()等方法,Set方法的遍歷只能用foreach或者iterator,不能用get方法,因為無序,也無法查詢指定索引位置的元素。

package student;

import java.util.Arrays;

import java.util.List;

import java.util.ArrayList;

import java.util.Scanner;

/**

* Created by Administrator on 2017/4/3.

*/

public class SetTest {

/**

*案例功能:

* 提供備選課程

* 創建學生對象,并給該學生添加三門課程添加在學生的courses—Set

* 類型的屬性當中

* 顯示備選課程

* 循環三次,每次輸入課程ID

* 往學生的courses屬性中添加與輸入的ID相匹配的課程,

* 輸出學生選擇的課程

*/

//定義一個課程List,并且調用構造方法初始化。后將之前的添加方法賦值過來并遍歷課程輸出

public List courseToSelect;

public SetTest(){

this.courseToSelect=new ArrayList();

}

public void testAdd(){

//首先要有一個課程對象的實例

Course cr1=new Course("1","數據結構");

//調用add方法添加

courseToSelect.add(cr1);

//打印輸出 courseToSelect.get(0)的數據

//當一個對象存入集合后它就變成了Object類型的數據取出時就要把類型轉換回來

Course temp=(Course) courseToSelect.get(0);

System.out.println("成功添加課程:"+temp.getId()+":"+temp.getName());

Course cr2=new Course("2","C語言");

//重載的add方法可以指定位置添加元素

courseToSelect.add(0,cr2);

Course temp2=(Course) courseToSelect.get(0);

System.out.println("成功添加課程:"+temp2.getId()+":"+temp2.getName());

Course[] cr3={new Course("3","離散數學"),new Course("4","匯編語言")};

//創建一個課程數組

//調用addAll把數組添加進去,但是這兒的參數要是Collection的實例,

// 就需要把數組轉換成List,用Arrays.asList()方法

courseToSelect.addAll(Arrays.asList(cr3));

//輸出

Course temp3=(Course)courseToSelect.get(2);

Course temp4=(Course)courseToSelect.get(3);

System.out.println("成功添加課程:"+temp3.getId()+":"+temp3.getName()+";"

+temp4.getId()+":"+temp4.getName());

Course[] cr4={new Course("5","高等數學"),new Course("6","大學英語")};

courseToSelect.addAll(2,Arrays.asList(cr4));

Course temp5=(Course)courseToSelect.get(2);

Course temp6=(Course)courseToSelect.get(3);

System.out.println("成功添加課程:"+temp5.getId()+":"+temp5.getName()+";"

+temp6.getId()+":"+temp6.getName());

}

public void test2(){

System.out.println("使用foreach循環遍歷List中一共有以下課程:");

for(Object obj:courseToSelect){

//因為類型不同需要強制類型轉換

System.out.println("課程:"+((Course)obj).getId() +":"+((Course)obj).getName());

}

}

public static void main(String[] args) {

SetTest st=new SetTest();

st.testAdd();

st.test2();

Student st1=new Student("1","宮園薰");

System.out.println("歡迎"+st1.getName()+"同學選課!每位同學可以選取三門課程哦");

Scanner sc=new Scanner(System.in);

//for循環循環三次,通過對比ID來存入對應的課程信息

for(int i=0;i<3;i++) {

System.out.println("請輸入您選擇的課程ID:");

String courseId = sc.next();

for (Course cr : st.courseToSelect) {

if (courseId.equals(cr.getId())) {

st1.courses.add(cr);

break;

}

}

}

for(Course cr2:st1.courses){

System.out.println("您選擇了課程:ID:"+cr2.getId()+":"+cr2.getName());

}

}

}

總結

以上是生活随笔為你收集整理的java中的集合框架_JAVA中的集合框架(上)List的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。