5 java中的集合类_java基础(5)-集合类1
集合的由來
數組是很常用的一種數據結構,但假如我們遇到以下這樣的的問題:
容器長度不確定
能自動排序
存儲以鍵值對方式的數據
如果遇到這樣的情況,數組就比較難滿足了,所以也就有了一種與數組類似的數據結構——集合類。即集合是java中提供的一種容器,可用來存儲多個數據
數組和集合的區別
1)長度
數組的長度固定
集合的長度可變
2)內容不同
數組存儲的是同一種類型元素
集合可存儲不同類型的元素
3)元素數據類型
數組可存儲基本數據類型,也可存儲引用數據類型
集合只能存儲引用類型
數組和集合的聯系
可使用toArray()和Arrays.asList()方法相互轉換
集合的集成體系
集合按存儲結構可以分為單列集合(Collection)和雙列集合(Map)
Collection
Collection:是單列集合的根接口,Collection表示一組對象。兩類子接口分別是LIst和Set【還有一類是Queue】
List接口:特點是元素有序,元素可重復。List接口的主要實現類有ArrayList和LinkedList
Set接口:特點是元素無序并且不可重復。Set接口的主要實現類有HashSet(散列存放)和TreeSet(有序存放)
Map
1)Map提供了一種映射關系,元素是以鍵值對(key-value)的形式存儲的,能夠根據key快速查找value,常用子類有Hashtable,HashMap和TreeMap
2)Map中的鍵值對以Entry類型的對象實例形式存在
3)鍵(key值)不可重復,value值可以
4)每個建最多只能映射到一個值
5)Map接口提供了分別返回key值集合、value值集合以及Entry(鍵值對)集合的方法
6)Map支持泛型,形式如:Map
Hashtable:底層是哈希表數據結構,不可存入null鍵null值,給集合是線程同步的。
HashMap:底層是哈希表數據結構,允許使用null鍵null值,該集合是不同步的
TreeMap:底層是二叉樹數據結構,線程不同步,可以用于給map集合中的鍵進行排序
Map接口與Collection接口的不同
map是雙列的,collection是單列的
map的鍵是唯一,collection的子體系set是唯一
map集合的數據結構只針對鍵有效,跟值無關,collection集合的數據結構是針對元素有效
集合框架思維導圖
集合中的方法
集合基本功能測試
向集合中添加元素
/*
*向集合中添加一個元素
*/
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo1{
public static void main(String[] args){
//創建集合對象
//Collection c = new Collection();//錯誤,接口不能實例化,需要找實現類
Collection c = new ArrayList();
//向集合中添加元素:boolean add(Object o);
c.add("10w");
c.add("20w");
c.add("30w");
//輸出
System.out.println(c);
}
}
----------------------------------------------
輸出結果:[10w, 20w, 30w]
----------------------------------------------
刪除集合中所有元素
/*
*刪除集合中所有元素
*/
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo2{
public static void main(String[] args){
//創建集合對象
Collection c = new ArrayList();
//向集合中添加元素
c.add("100w");
c.add("200w");
c.add("300w");
System.out.println("刪除前:"+c);
//刪除集合中所有元素:void clear()
c.clear();
System.out.println("刪除后:"+c);
}
}
------------------------------------------
輸出結果:
刪除前:[100w, 200w, 300w]
刪除后:[]
------------------------------------------
刪除該集合中指定的元素
/*
* 刪除該集合中指定元素
*/
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo3{
public static void main(String[] args){
//創建集合
Collection c = new ArrayList();
//向集合中添加元素
c.add("10w");
c.add("30w");
c.add("50w");
System.out.println("刪除前:"+c);
//刪除該集合中中指定的元素:boolean remove(Object o)
c.remove("30w");
System.out.println("刪除后:"+c);
}
}
---------------------------------------------
輸出結果:
刪除前:[10w, 30w, 50w]
刪除后:[10w, 50w]
----------------------------------------------
判斷該集合中是否包含某個元素
/*
*判斷該集合中是否包含某個元素
*/
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo4{
public static void main(String[] args){
//創建集合
Collection c = new ArrayList();
//添加元素
c.add("hadoop");
c.add("spark");
c.add("storm");
System.out.println(c);
//判斷該集合中是否包含某個元素:boolean contains(Object o)
System.out.println("判斷有沒有spark:"+c.contains("spark"));
System.out.println("判斷有沒有data:"+c.contains("data"));
}
}
---------------------------------------------
輸出結果
[hadoop, spark, storm]
判斷有沒有spark:true
判斷有沒有data:false
------------------------------------------------
判斷集合是否為空
/*
*判斷集合是否為空
*/
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo5{
public static void main(String[] args){
//創建集合
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
//向集合2中添加元素
c2.add("java");
c2.add("scala");
c2.add("python");
//判斷集合是否為空:boolean isEmpty()
System.out.println("判斷集合c1是否為空:"+c1.isEmpty());
System.out.println("判斷集合c2是否為空:"+c2.isEmpty());
}
}
---------------------------------------------
輸出結果
判斷集合c1是否為空:true
判斷集合c2是否為空:false
-------------------------------------------
獲取該集合中元素的個數
/*
*判斷該元素的個數
*/
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo6{
public static void main(String[] args){
//創建集合
Collection c = new ArrayList();
//添加元素
c.add("wujiadogn");
c.add("jiangrui");
c.add("sunqiangkun");
c.add("xuqingyu");
//獲取該集合的元素個數: int size()
System.out.println(c.size());
}
}
-------------------------------------
輸出結果
4
-------------------------------------
將指定集合的所有元素添加到該集合中
/*
*將指定集合的所有元素添加到該集合中
*/
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo7{
public static void main(String[] args){
//創建集合
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
//添加元素
c1.add("hadoop");
c1.add("spark");
c1.add("storm");
c2.add("wujiadong");
System.out.println("c1:"+c1);
System.out.println("c2:"+c2);
//將指定集合中所有元素添加到該元素中:boolean addAll(Collection c)
c1.addAll(c2);//將c2添加到c1中
System.out.println("將集合c2元素添加到c1后的c1:"+c1);
System.out.println("將集合c2元素添加到c1后的c2:"+c2);
}
}
---------------------------------------
輸出結果
c1:[hadoop, spark, storm]
c2:[wujiadong]
將集合c2元素添加到c1后的c1:[hadoop, spark, storm, wujiadong]
將集合c2元素添加到c1后的c2:[wujiadong]
---------------------------------------
刪除指定集合中的所有元素
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo8{
public static void main(String[] args){
//創建集合
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
//添加元素
c1.add("hadoop1");
c1.add("hadoop2");
c1.add("hadoop3");
c2.add("spark1");
c2.add("spark2");
c2.add("spark3");
c2.add("hadoop1");
System.out.println("c1:"+c1);
System.out.println("c2:"+c2);
System.out.println("c1刪除c2的元素");
c1.removeAll(c2);
System.out.println("c1:"+c1);
System.out.println("c2:"+c2);
}
}
----------------------------------------
輸出結果
c1:[hadoop1, hadoop2, hadoop3]
c2:[spark1, spark2, spark3, hadoop1]
c1刪除c2的元素
c1:[hadoop2, hadoop3]
c2:[spark1, spark2, spark3, hadoop1]
---------------------------------------------
判斷該集合中是否包含指定集合的所有元素
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo8{
public static void main(String[] args){
//創建集合
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
Collection c3 = new ArrayList();
//添加元素
c1.add("hadoop1");
c1.add("hadoop2");
c1.add("hadoop3");
c2.add("spark1");
c2.add("spark2");
c2.add("spark3");
c2.add("hadoop1");
c3.add("hadoop1");
c3.add("hadoop2");
System.out.println("c1:"+c1);
System.out.println("c2:"+c2);
System.out.println("c3:"+c3);
System.out.println("c1是否包含c2:"+c1.containsAll(c2));
System.out.println("c1是否包含c3:"+c1.containsAll(c3));
System.out.println("retainAll()返回值表示c1是否發生過改變:"+c1.retainAll(c2));
System.out.println("c1:"+c1);
System.out.println("c2:"+c2);
}
}
注釋:
boolean retainAll(Collection c):兩個集合都有的元素
假假設有兩個集合A和B,A和B做交集,最終的結果保存在A中,B不變;返回值表示的是A是否發過生改變
--------------------------------
輸出結果
c1:[hadoop1, hadoop2, hadoop3]
c2:[spark1, spark2, spark3, hadoop1]
c3:[hadoop1, hadoop2]
c1是否包含c2:false
c1是否包含c3:true
c1和c2都有的元素retainAll():true
c1:[hadoop1]
c2:[spark1, spark2, spark3, hadoop1]
-------------------------------------
集合的遍歷
集合的使用步驟
1)創建集合對象
2)創建元素對象
3)把元素添加到集合
4)遍歷集合
a:通過集合對象獲取迭代器對象
b:通過迭代器對象的hasNext()方法判斷是否有元素
c:通過迭代器對象的next()方法獲取元素并移動到下一個位置
方法一:通過轉換成數組進行遍歷
/*
*通過將集合轉換成數組進行遍歷
*/
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo1{
public static void main(String[] args){
//創建集合
Collection c = new ArrayList();
//向數組中添加元素
c.add("hadoop");
c.add("spark");
c.add("storm");
//Object[] toArray():將集合轉換成數組,可以實現集合的遍歷
Object[] objs = c.toArray();
for(int i=0;i
System.out.println(objs[i]);
}
}
}
----------------------------------------
輸出結果
hadoop
spark
storm
---------------------------------------
練習:用集合存儲5個學生對象,并把學生對象進行遍歷
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo2{
public static void main(String[] args){
//創建集合
Collection c = new ArrayList();
//創建學生對象
Student s1 = new Student("wwww",20);
Student s2 = new Student("jjj",21);
Student s3 = new Student("ddd",22);
Student s4 = new Student("sss",23);
Student s5 = new Student("qqq",24);
//將對象存儲到集合中
c.add(s1);
c.add(s2);
c.add(s3);
c.add(s4);
c.add(s5);
//把集合轉成數組
Object[] objs = c.toArray();
for(int i=0;i
System.out.println(objs[i]);
}
}
}
class Student{
//成員變量
private String name;
private int age;
//構造方法
public Student(){
super();
}
public Student(String name,int age){
this.name = name;
this.age = age;
}
//getXxx()和setXxx()方法
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public String toString(){
return "Student [name="+name+",age="+age+"]";
}
}
---------------------------------
輸出結果
Student [name=wwww,age=20]
Student [name=jjj,age=21]
Student [name=ddd,age=22]
Student [name=sss,age=23]
Student [name=qqq,age=24]
--------------------------------
方法二:集合專用遍歷方式:迭代器
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
public class ObjectArrayDemo3{
public static void main(String[] args){
//創建集合
Collection c = new ArrayList();
c.add("hadoop");
c.add("spark");
c.add("storm");
// Iterator iterator();迭代器,集合的專用遍歷方式
Iterator it = c.iterator();//實際返回的子類對象,這里是多態
/*
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
*/
while(it.hasNext()){
String s = (String) it.next();
System.out.println(s);
}
}
}
-------------------------------------
輸出結果
hadoop
spark
storm
---------------------------------------
練習:用集合存儲5個對象,并把學生對象進行遍歷,用迭代器遍歷
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
public class ObjectArrayDemo4{
public static void main(String[] args){
//創建集合
Collection c = new ArrayList();
Student s1 = new Student("www",21);
Student s2 = new Student("jjj",22);
Student s3 = new Student("ddd",23);
Student s4 = new Student("sss",24);
Student s5 = new Student("qqq",25);
c.add(s1);
c.add(s2);
c.add(s3);
c.add(s4);
c.add(s5);
Iterator it = c.iterator();
while(it.hasNext()){
//System.out.println(it.next());
Student s = (Student) it.next();
System.out.println(s);
}
}
}
class Student{
//成員變量
private String name;
private int age;
//無參構造方法
public Student(){
super();
}
//有參構造方法
public Student(String name,int age){
this.name = name;
this.age = age;
}
//getXxx方法和setXxx方法
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int age(){
return age;
}
//為什么需要這個方法,沒有這個方法輸出結果過就是地址值
public String toString(){
return "Student [name="+name+",age="+age+"]";
}
}
-------------------------------------------
輸出結果
Student [name=www,age=21]
Student [name=jjj,age=22]
Student [name=ddd,age=23]
Student [name=sss,age=24]
Student [name=qqq,age=25]
--------------------------------------------
練習:存儲字符串并遍歷
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
public class ObjectArrayDemo5{
public static void main(String[] args){
//創建集合對象
Collection c = new ArrayList();
//向集合添加元素
c.add("wu");
c.add("sun");
c.add("jiang");
c.add("xu");
c.add("haha");
//通過集合對象獲取迭代器對象
Iterator it = c.iterator();
//通過迭代器對象的hasNext()方法判斷有沒有元素
while(it.hasNext()){
//通過迭代器對象的next()方法獲取元素
String s = (String) it.next();
System.out.println(s);
}
}
}
-----------------------------------
輸出結果
wu
sun
jiang
xu
haha
------------------------------------
參考資料
總結
以上是生活随笔為你收集整理的5 java中的集合类_java基础(5)-集合类1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java计算器程序加编辑帮助_这里有个J
- 下一篇: java 内存泄露对象排查_记录一次 j