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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java基础_集合框架1

發(fā)布時間:2023/12/20 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java基础_集合框架1 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、集合框架(體系概述)

為什么會出現(xiàn)集合框架(集合類)?

面向?qū)ο笳Z言對事物的體現(xiàn)都是以對象的形式,所以為了方便對多個對象的操作,就對對象進(jìn)行存儲,集合就是存儲對象最常用的一種方式。

數(shù)組和集合框架是容器,有何不同?

數(shù)組雖然也可以存儲對象,但長度是固定的;集合長度可變。數(shù)組中可以存儲基本數(shù)據(jù)類型,集合只能存儲對象。

集合框架的特點:

集合只用于存儲對象,集合長度可變,集合可以存儲不同類型的對象。

?

為什么會出現(xiàn)這么多容器呢?

因為每一個容器對數(shù)據(jù)的存儲方式不同。這個存儲方式稱之為:數(shù)據(jù)結(jié)構(gòu)。

二、集合框架(共性方法)

/*集合框架(共性方法):1.add方法的參數(shù)類型是Object,以便接受任意類型的對象 2.集合中存儲的都是對象的引用(地址)。*/ import java.util.*; class CollectionDemo {public static void main(String[] args) {base_method();base_method_2(); }public static void base_method(){//創(chuàng)建一個集合容器。使用Collection接口的子類ArrayListArrayList a1=new ArrayList();a1.add("java01");//添加元素 add(Object obj);a1.add("java02");a1.add("java03");a1.add("java04");sop("原集合:"+a1);//打印sop("java03是否存在:"+a1.contains("java03"));sop("集合是否為空? "+a1.isEmpty());sop("size:"+a1.size());//獲取集合長度。a1.remove("java02");//移除java02sop("刪除java02后的集合:"+a1);//打印a1.clear();//清空集合sop("清空后的集合:"+a1);//打印}public static void base_method_2(){ArrayList a1=new ArrayList();a1.add("java01");a1.add("java02");a1.add("java03");a1.add("java04");ArrayList a2=new ArrayList();a2.add("java01");a2.add("java02");a2.add("java05");a2.add("java06");a1.retainAll(a2);//a1中存放和a2的交集sop("a1:"+a1);sop("a2:"+a2);a1.removeAll(a2);//移除a1中a2存在的所有元素sop("a1:"+a1);sop("a2:"+a2);}public static void sop(Object obj){System.out.println(obj);} }


三、集合框架(迭代器)

迭代器:集合的取出元素的方式。

/* 迭代器: 集合的取出元素的方式。 */ import java.util.*; class CollectionDemo {public static void main(String[] args) {method_get();}public static void method_get(){ArrayList a1=new ArrayList();a1.add("java01");a1.add("java02");a1.add("java03");a1.add("java04");/*Iterator it=a1.iterator();//獲取迭代器,用于取出集合中的元素。while(it.hasNext()){sop(it.next());}*/for(Iterator it=a1.iterator();it.hasNext();)//及時釋放Iterator{sop(it.next());}}public static void sop(Object obj){System.out.println(obj);} }


四、集合框架(List集合共性方法)

/* Collection|--List:元素是有序的,同時元素可以重復(fù),因為該集合體系有索引。|--Set:元素是無序的,元素不可重復(fù),因為該集合體系有沒有索引。List: 特有方法。凡是可以操作角標(biāo)的方法都是該體系特有的方法: 增:add(index,element); addAll(index,element); 刪:remove(index); 改:set(intdex,element); 查:get(intdex);subList(from,to);ListIterator();*/ import java.util.*; class ListDemo {public static void main(String[] args) {ArrayList a1=new ArrayList();a1.add("java01");a1.add("java02");a1.add("java03");a1.add("java04");sop("原集合:"+a1);a1.add(1,"java09");//在指定位置添加sop(a1);a1.remove(2);sop(a1);a1.set(2,"java007");//在指定位置修改sop(a1);sop("get{2}:"+a1.get(2));//在指定位置獲取for(int i=0;i<a1.size();i++)//獲取全部{System.out.println("a["+i+"]="+a1.get(i));}Iterator it=a1.iterator();while(it.hasNext())//用迭代器{sop("next:"+it.next());}//通過indexOf獲取對象的位置sop("index:"+a1.indexOf("java02"));List sub=a1.subList(1,3);sop("sub:"+sub);}public static void sop(Object obj){System.out.println(obj);} }


五、集合框架(ListIterator)

/* Collection|--List:元素是有序的,同時元素可以重復(fù),因為該集合體系有索引。|--Set:元素是無序的,元素不可重復(fù),因為該集合體系有沒有索引。List: 特有的迭代器。ListIterator是Iterator的子接口。 在迭代時,不可以通過集合對象的方法操作集合中的元素,因為會發(fā)生 java.util.ConcurrentModificationException異常。 所以在迭代器時,只能用迭代其的方法操作元素,可是Iterator方法是有限的。 如果想要其它的操作如:添加,修改等,就需要使用其自接口ListIterator。 該接口只能通過List集合的listIterator方法獲取。*/ import java.util.*; class ListDemo {public static void main(String[] args) {//演示列表迭代器ArrayList a1=new ArrayList();a1.add("java01");a1.add("java02");a1.add("java03");a1.add("java04");sop(a1);ListIterator li=a1.listIterator();while(li.hasNext()){Object obj=li.next();if(obj.equals("java02"))li.add("java009");}sop("hasNext():"+li.hasNext());sop("hasPrevious():"+li.hasPrevious());sop(a1);/*//在迭代過程中準(zhǔn)備添加或刪除元素Iterator it=a1.iterator();while(it.hasNext())//用迭代器{Object obj=it.next();if(obj.equals("java02"))//a1.add("java008");it.remove();//將java02的引用從集合中移除sop("obj="+obj);}sop(a1);*/}public static void sop(Object obj){System.out.println(obj);} }


六、集合框架(List集合具體對象的特點)

Collection

|--List:元素是有序的,同時元素可以重復(fù),因為該集合體系有索引。

|--ArrayList:底層的數(shù)據(jù)結(jié)構(gòu)使用數(shù)組。特點:查詢速度很快。但是增刪稍慢。線程不 同步。

|--LinkedList:底層的數(shù)據(jù)結(jié)構(gòu)使用鏈表。特點:增刪速度很快,查詢稍慢。

|--Vector:底層是數(shù)組數(shù)據(jù)結(jié)構(gòu)。線程同步。被ArrayList替代。

七、集合框架(Vector中的枚舉)

/* Vector特有取出方式。 發(fā)現(xiàn)枚舉和迭代器很像。 其實枚舉和迭代是一樣的,為什么出現(xiàn)迭代呢? 因為枚舉的名稱以及方法的名稱都過長,所以被迭代器取代了,枚舉郁郁而終了。 */ import java.util.*; class VectorDemo {public static void main(String[] args) {Vector v=new Vector();v.add("java01");v.add("java02");v.add("java03");v.add("java04");Enumeration en=v.elements();while(en.hasMoreElements()){System.out.println(en.nextElement());}} }


八、集合框架(LinkedList)

/* LinkedList特有方法: addFirst(): addLast(): 添加元素getFirst(): getLast(): 獲取元素,但不刪除元素removeFirst(): removeLast(): 獲取元素,刪除元素。如果集合中沒有元素,會出現(xiàn)NoSuchElementException異常。所以在JDK1.6出現(xiàn)了替代方法: offerFirst() offerLast() 添加元素peekFirst() peekLast() 獲取元素,但不刪除元素。如果集合中沒有元素,會出返回nullpollFirst() pollLast() 獲取元素,刪除元素。如果集合中沒有元素,會出返回null*/ import java.util.*; class LinkedListDemo {public static void main(String[] args) {LinkedList link1=new LinkedList();link1.addFirst("java01");link1.addFirst("java02");link1.addFirst("java03");link1.addFirst("java04");sop("link1="+link1);LinkedList link2=new LinkedList();link2.addLast("java01");link2.addLast("java02");link2.addLast("java03");link2.addLast("java04");sop("link2="+link2);sop(link2.getFirst());sop(link2.getLast());sop("size="+link2.size());sop(link2.removeFirst());//如果列表為空,會拋出null異常sop(link2.removeLast());sop("size="+link2.size());while(!link2.isEmpty())//全部獲取{sop(link2.removeFirst());}}public static void sop(Object obj){System.out.println(obj);}}


九、集合框架(LinkedList練習(xí))

/* 使用LinkedList模擬一個堆棧或隊列的數(shù)據(jù)結(jié)構(gòu)。 堆棧:先進(jìn)后出。 隊列:先進(jìn)先出。 */ import java.util.*; class DuiLie//隊列 {private LinkedList link;DuiLie(){link=new LinkedList();}public void myAdd(Object obj){link.addFirst(obj);}public Object myGet(){return link.removeLast();//堆棧:return link.removeFirst();}public boolean isNull(){return link.isEmpty();} } class LinkedListTest {public static void main(String[] args) {DuiLie d1=new DuiLie();d1.myAdd("java01");d1.myAdd("java02");d1.myAdd("java03");d1.myAdd("java04");while(!d1.isNull()){System.out.println(d1.myGet());}} }


十、集合框架(ArrayList練習(xí))

/* 去除ArrayList集合中重復(fù)的元素。 */ import java.util.*; class ArrayListTest {public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args) {ArrayList a1=new ArrayList();a1.add("java01");a1.add("java01");a1.add("java03");a1.add("java02");a1.add("java03");a1.add("java04");a1.add("java04");a1.add("java04");sop("原數(shù)據(jù):"+a1);sop("去除重復(fù)元素:"+singleElement(a1));}public static ArrayList singleElement(ArrayList a1){//定義一個臨時容器ArrayList a2=new ArrayList();Iterator it=a1.iterator();while(it.hasNext())//next()調(diào)用一次,就hasNext()判斷一次。{Object obj=it.next();if(!a2.contains(obj))a2.add(obj);}return a2;} }


/* 將自定義對象作為元素存到ArrayList集合中,并去除重復(fù)元素。 比如:存人對象。同姓名同齡人,視為同一個人。為重復(fù)元素。思路: 1.對人描述,將數(shù)據(jù)封裝成人對象。 2.定義容器,將人存入。 3.取出。結(jié)論:List集合判斷元素是否相同,依據(jù)的是元素的equals方法。 */ import java.util.*; class Person {private String name;private int age;Person(String name,int age){this.name=name;this.age=age;}public String getName(){return name;}public int getAge(){return age;}public boolean equals(Object obj)//重寫Object類的equals方法{if(!(obj instanceof Person))return false;Person p=(Person)obj;System.out.println(this.name+"..........."+p.name);//測試contains調(diào)用equalsreturn this.name.equals(p.name)&&this.age==p.age;} } class ArrayListTest2 {public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args) {ArrayList a1=new ArrayList();a1.add(new Person("lisi01",30));a1.add(new Person("lisi02",32));a1.add(new Person("lisi03",33));a1.add(new Person("lisi04",34));a1.add(new Person("lisi01",30));a1.add(new Person("lisi02",32));a1.add(new Person("lisi03",33));a1.add(new Person("lisi04",34));a1=singleElement(a1);//去除重復(fù)Iterator it=a1.iterator();while(it.hasNext()){Person p=(Person)it.next();sop("姓名:"+p.getName()+"\t年齡:"+p.getAge());}}public static ArrayList singleElement(ArrayList a1){//定義一個臨時容器ArrayList a2=new ArrayList();Iterator it=a1.iterator();while(it.hasNext())//next()調(diào)用一次,就hasNext()判斷一次。{Object obj=it.next();if(!a2.contains(obj))//底層調(diào)用equals()方法a2.add(obj);}return a2;}}


十一、集合框架(HashSet)

/* |--Set:元素是無序的,元素不可重復(fù),因為該集合體系有沒有索引。|--HashSet:底層數(shù)據(jù)結(jié)構(gòu)是哈希表。|--TreeSet:Set集合的功能和Collection是一致的。 */ import java.util.*; class HashSetDemo {public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args) {HashSet hs=new HashSet();sop(hs.add("java01"));sop(hs.add("java01"));hs.add("java02");hs.add("java03");hs.add("java03");hs.add("java04");Iterator it=hs.iterator();while(it.hasNext()){sop(it.next());}} }


十二、集合框架(HashSet存儲自定義對象)

/* 給hashSet集合中存入自定義對象。 比如:存人對象。同姓名同齡人,視為同一個人。為重復(fù)元素。HashSet是如何保證元素唯一性的呢? 那是通過元素的兩個方法:hashCode和equals來完成的 如果元素的hashCode值相同,才會判斷equals是否為true。 如果元素的hashCode值不相同,不會調(diào)用equals */ import java.util.*; class Person {private String name;private int age;Person(String name,int age){this.name=name;this.age=age;}public String getName(){return name;}public int getAge(){return age;}public int hashCode()//重寫Object類的hashCode方法{System.out.println(this.name+"....hashCode");return 60;}public boolean equals(Object obj)//重寫Object類的equals方法{if(!(obj instanceof Person))return false;Person p=(Person)obj;System.out.println(this.name+".....equals....."+p.name);//測試contains調(diào)用equalsreturn this.name.equals(p.name)&&this.age==p.age;} } class HashSetDemo {public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args) {HashSet hs=new HashSet();hs.add(new Person("a1",11));hs.add(new Person("a2",12));hs.add(new Person("a3",13));hs.add(new Person("a2",12));Iterator it=hs.iterator();while(it.hasNext()){Person p=(Person)it.next();sop("姓名:"+p.getName()+"\t年齡:"+p.getAge());}} }


?

hashCode改進(jìn)后:

public int hashCode()//重寫Object類的hashCode方法 {System.out.println(this.name+"....hashCode");return this.name.hashCode()+age*13;//age*13是確保唯一性。 }

?


十三、集合框架(HashSet判斷和刪除的依據(jù))

/* 注意,對于判斷元素是否存在以及刪除等操作,依賴元素的 hashCode和equals方法。 */ import java.util.*; class Person {private String name;private int age;Person(String name,int age){this.name=name;this.age=age;}public String getName(){return name;}public int getAge(){return age;}public int hashCode()//重寫Object類的hashCode方法{System.out.println(this.name+"....hashCode");return this.name.hashCode()+age*13;}public boolean equals(Object obj)//重寫Object類的equals方法{if(!(obj instanceof Person))return false;Person p=(Person)obj;System.out.println(this.name+".....equals....."+p.name);//測試contains調(diào)用equalsreturn this.name.equals(p.name)&&this.age==p.age;} } class HashSetDemo {public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args) {HashSet hs=new HashSet();hs.add(new Person("a1",11));hs.add(new Person("a2",12));hs.add(new Person("a3",13));hs.add(new Person("a2",12));hs.remove(new Person("a3",13));//刪除元素sop("a1:"+hs.contains(new Person("a1",11)));//獲取元素是否存在Iterator it=hs.iterator();while(it.hasNext()){Person p=(Person)it.next();sop("姓名:"+p.getName()+"\t年齡:"+p.getAge());}} }

總結(jié)

以上是生活随笔為你收集整理的Java基础_集合框架1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。