java中集合的结构list类型
collection ?集合
Collection接口 是List Set和Queue接口的父接口 定義了可用于操作List,Set和Queue的方法---增刪改查
List接口及其實(shí)現(xiàn)類 ---ArrayList
List是元素有序并且可以重復(fù)的集合,被稱為序列 ?List可以精確的控制每個(gè)元素的插入位置,或刪除某個(gè)位置元素 ?ArrayList---數(shù)組序列,是List的一個(gè)重要實(shí)現(xiàn)類
ArrayList底層是由數(shù)組實(shí)現(xiàn)的
Course.java代碼如下所示:
/**
* 課程類
*/
public class Course
{
?? ?public String id;
?? ?public String name;
?? ?public Course(String id,String name){
?? ? ?this.id ? = id;
?? ? ?this.name = name;
?? ?}
?? ?//添加一個(gè)無參構(gòu)造器
?? ?public Course() {
?? ?
?? ?}
?? ?//重新equals函數(shù),這個(gè)寫了一部分不再寫了
?? ?/*@Override
?? ?public boolean equals(Object obj) {
?? ? ? if(this == obj) {
?? ? ? ? ?return true;
?? ? ? }
?? ? ? if(obj == null)?
?? ??? ? ? return false;
?? ? ? return true;
?? ?}
? ? */
}
ListTest.java代碼(基本的List類型)如下所示:
import java.util.List;
import java.util.ArrayList; //需要引用這個(gè)
import java.util.Arrays; //需要引用這個(gè)
import java.util.Iterator; //通過迭代器訪問
/**
* 備選課程類
*/
public class ListTest
{
? ? /**
? ? * 用于存放備選課程的List
? ? */
?? ?public List coursesToSelect;
?? ?public ListTest(){
?? ? ?this.coursesToSelect = new ArrayList();
?? ?}
?? ?/**
? ? * 用于往coursesToSelect中添加備選課程
? ? */
?? ?public void testAdd() {
?? ? ?//創(chuàng)建一個(gè)課程對象,并通過調(diào)用add方法,添加到備選課程List中
?? ? ?Course cr1 = new Course("1","數(shù)據(jù)結(jié)構(gòu)");
?? ? ?coursesToSelect.add(cr1);
?? ? ?Course temp = (Course)coursesToSelect.get(0);
?? ? ?System.out.println("添加了課程:"+temp.id+":"+temp.name);
?? ? ?Course cr2 = new Course("2","C語言");
?? ? ?coursesToSelect.add(0,cr2);
?? ? ?Course temp2 = (Course)coursesToSelect.get(0);
?? ? ?System.out.println("添加了課程:"+temp2.id+":"+temp2.name);
?? ? ?coursesToSelect.add(cr1);
?? ? ?Course temp0 = (Course)coursesToSelect.get(2);
?? ? ?System.out.println("添加了課程:"+temp0.id+":"+temp0.name);
? ? ??
?? ? ?//以下方法會拋出數(shù)組下標(biāo)越界異常
?? ? ?//Course cr3 = new Course("3","test");
?? ? ?//coursesToSelect.add(4,cr3);
?? ? ?Course[] course = {new Course("3","離散數(shù)學(xué)"),new Course("4","匯編語言")};
?? ? ?coursesToSelect.addAll(Arrays.asList(course));
?? ? ?Course temp3 = (Course)coursesToSelect.get(3);
?? ? ?Course temp4 = (Course)coursesToSelect.get(4);
?? ? ?System.out.println("添加了兩門課程:"+temp3.id+":"+temp3.name+";"+temp4.id+":"+temp4.name);
?? ? ?Course[] course2 = {new Course("5","高等數(shù)學(xué)"),new Course("6","大學(xué)英語")};
?? ? ?coursesToSelect.addAll(2,Arrays.asList(course2));
?? ? ?Course temp5 = (Course)coursesToSelect.get(2);
?? ? ?Course temp6 = (Course)coursesToSelect.get(3);
?? ? ?System.out.println("添加了兩門課程:"+temp5.id+":"+temp5.name+";"+temp6.id+":"+temp6.name);
?? ?}
?? ?/*
?? ? * 取得List中元素的方法
?? ? * @param args
?? ?*/
?? ?public void testGet() {
?? ? ? int size = coursesToSelect.size();//size()表示取得元素的長度
?? ? ? for(int i=0;i<size;i++) {
?? ? ? ? Course cr = (Course)coursesToSelect.get(i);
?? ??? ? System.out.println("課程:"+cr.id+":"+cr.name);
?? ? ? }
?? ?}
?? ?/*
?? ? * 通過迭代器來遍歷List
?? ? * @param args
?? ?*/
?? ?public void testIterator() {
?? ? ? //通過集合的iterator方法,取得迭代器的實(shí)例
? ? ? ?Iterator it = coursesToSelect.iterator();
?? ? ? System.out.println("有如下課程待選(通過迭代器訪問):");
?? ? ? while(it.hasNext()) {
?? ? ? ? Course cr = (Course)it.next();
? ? ? ? ?System.out.println("課程:"+cr.id+":"+cr.name);
?? ? ? }
?? ?}
?? ?/*
?? ? * 通過for each方法訪問集合元素
?? ? * @param args
?? ?*/
?? ?public void testForEach() {
?? ? ? System.out.println("有如下課程待選(通過for each訪問):");
?? ? ? for(Object obj:coursesToSelect) {
?? ? ? ? ?Course cr = (Course)obj;
?? ??? ? ?System.out.println("課程:"+cr.id+":"+cr.name);
?? ? ? }
?? ?}
?? ?/*
?? ? * 修改list中的元素
?? ? * @param args
?? ?*/
?? ?public void testModify() {
?? ? ? coursesToSelect.set(4,new Course("7","毛概"));
?? ?}
?? ?/*
?? ? * 刪除list中的元素
?? ? * @param args
?? ?*/
?? ?public void testRemove() {
?? ? ? Course cr = (Course)coursesToSelect.get(4);
?? ? ? System.out.println("我是課程:"+cr.id+":"+cr.name+",我即將被刪除");
?? ? ? coursesToSelect.remove(cr);
?? ? ? System.out.println("成功刪除課程!");
?? ? ? testForEach();
?? ?}
?? ?/*
?? ? * 往list中添加一些奇怪的東西
?? ? * @param args
?? ?*/
?? ?public void testType() {
?? ? ? System.out.println("能否往List中添加一些奇怪的東西呢!?");
?? ? ? coursesToSelect.add("我不是課程,我只是一個(gè)無辜的字符串!!");
?? ?}
?? ?public static void main(String[] args){
?? ? ?/*ListTest lt = new ListTest();
?? ? ?lt.testAdd();
?? ? ?lt.testGet();
?? ? ?lt.testIterator();
?? ? ?lt.testForEach();
?? ? ?lt.testModify();
?? ? ?lt.testForEach();
?? ? ?lt.testRemove();*/
?? ? ?/*
?? ? ? ?D:\javacode>javac ListTest.java
?? ??? ?注: ListTest.java使用了未經(jīng)檢查或不安全的操作。
?? ??? ?注: 有關(guān)詳細(xì)信息, 請使用 -Xlint:unchecked 重新編譯。
?? ??? ?D:\javacode>java ListTest
?? ??? ?添加了課程:1:數(shù)據(jù)結(jié)構(gòu)
?? ? ?*/
?? ? ?/*
?? ? ? ?D:\javacode>java ListTest
?? ??? ?添加了課程:1:數(shù)據(jù)結(jié)構(gòu)
?? ??? ?添加了課程:2:C語言
?? ??? ?添加了兩門課程:3:離散數(shù)學(xué);4:匯編語言
?? ??? ?添加了兩門課程:5:高等數(shù)學(xué);6:大學(xué)英語
?? ? ?*/
?? ? ?ListTest lt = new ListTest();
?? ? ?lt.testAdd();
?? ? ?lt.testType();
?? ? ?lt.testForEach();
?? ?}//main end
}//ListTest end
獲取元素可以用get,get的時(shí)候可能需要類型轉(zhuǎn)換,尤其是對象的存儲寫入的時(shí)候,因?yàn)閷ο蟠嫒爰隙甲兂蒓bject類型了,
取出來時(shí)需要類型轉(zhuǎn)換。
帶有泛型---Course,的List類型屬性
TestGeneric.java代碼如下所示:
import java.util.ArrayList;
import java.util.List;
public class TestGeneric
{
? ?/**
? ?* 帶有泛型---Course,的List類型屬性
? ?*/
? ?public List<Course> courses;
? ?public TestGeneric() {
? ? ? this.courses = new ArrayList<Course>();
? ?}
? ?/**
? ?* 測試添加
? ?*/
? ?public void testAdd() {
? ? ? Course cr1 = new Course("1","大學(xué)語文");
?? ? ?courses.add(cr1);
?? ? ?//泛型集合中,不能添加泛型規(guī)定的類型及其子類型以外的對象,否則會報(bào)錯(cuò)
?? ? ?//courses.add("能否添加一些奇怪的東西呢");
?? ? ?Course cr2 = new Course("2","Java基礎(chǔ)");
?? ? ?courses.add(cr2);
? ?}
? ?/*
?? ? * 測試循環(huán)遍歷
?? ? * @param args
?? ?*/
?? ?public void testForEach() {
?? ? ? for(Course cr : courses) {
?? ??? ? ?System.out.println(cr.id+":"+cr.name);
?? ? ? }
?? ?}
? ? /*
?? ? * 泛型結(jié)合可以添加泛型的子類型的對象實(shí)例
?? ? * 這個(gè)也把父類Course添加的元素給打印出來了
?? ? * @param args
?? ?*/
?? ?public void testChild() {
?? ? ? ChildCourse ccr = new ChildCourse();
?? ? ? ccr.id = "3";
?? ? ? ccr.name = "我是子類型的課程對象實(shí)例~~";
?? ? ? courses.add(ccr);
?? ?}
? ?/**
? ?* 泛型不能使用基本類型
? ?*/
? ?public void testBasicType() {
? ? ? List <Integer> list = new ArrayList<Integer>();
?? ? ?list.add(1);
? ? ? System.out.println("基本類型必須使用包裝類作為泛型!"+list.get(0));
? ?}
? ?/**
? ?* @param args
? ?*/
?? ?public static void main(String[] args) {
?? ? ?//System.out.println("都是好的");
?? ? ?TestGeneric tg = new TestGeneric();
? ? ? tg.testAdd();
?? ? ?tg.testForEach();
?? ? ?/*
?? ? ?D:\javacode\code>java TestGeneric
? ? ? 1:大學(xué)語文
? ? ? 2:Java基礎(chǔ)
?? ? ?*/
?? ? ?tg.testChild();
?? ? ?tg.testForEach();
?? ? ?/*
?? ? ?//這個(gè)也把父類Course添加的元素給打印出來了
?? ? ?1:大學(xué)語文
? ? ? 2:Java基礎(chǔ)
? ? ? 3:我是子類型的課程對象實(shí)例~~
?? ? ?*/
?? ? ?tg.testBasicType();
?? ? ?//res:基本類型必須使用包裝類作為泛型!1
?? ?}//main end
}//TestGeneric end
ChildCourse.java代碼如下所示:
public class ChildCourse extends Course
{
}
總結(jié)
以上是生活随笔為你收集整理的java中集合的结构list类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是etf
- 下一篇: java中集合的结构Set类型