Collection集合 數組的長度是固定的,集合的長度是可變的 數組中存儲的是同一類型的元素,可以存儲基本數據類型值。集合存儲的都是對象。而且對象的類型可以不一致。 集合框架 java import java.util. ; public class IteratorDemo{ public st ...
Collection集合
數組的長度是固定的,集合的長度是可變的
數組中存儲的是同一類型的元素,可以存儲基本數據類型值。集合存儲的都是對象。而且對象的類型可以不一致。
集合框架
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);
}
}
數據機構
棧:先進後出,只有一個入口和出口
隊列:先進先出,一個入口,一個出口
數組:數組中的地址是連續的 ,可以直接根據索引值查詢,,查詢快,增刪慢
鏈表:查詢慢:鏈表中的地址不是連續的,每次查詢都必須從頭開始查詢
增刪快:鏈表結構,增加或刪除一個元素,對鏈表的整體結構沒有影響,所以增刪快
紅黑樹:查詢速度非常快
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