集合框架的概述
- 集合、数组都是对多个数据进行存储操作的,简称java容器
说明:此时的存储,主要指的是内存层面的存储,不涉及持久化的存储(.txt,.jpg,.avi,数据库中)
- 数组在存储数据方面的特点:
1、一旦初始化之后,长度就确定了
2、一旦定义好,其元素的类型也就确定了,我们也就只能操作指定类型的数据了。比如:String[] arr
,int[] arr1
,Object[] arr2
缺点:
1、一旦初始化以后,其长度就无法修改
2、数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便,同时效率也不高
3、获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用
4、数组存储数据的特点:有序、可重复。对于无序,不可重复的需求,无法满足
集合框架
Collection接口:单列集合,用来存储一个一个的对象
package com.atguigu.java;
import org.junit.Test;
import java.util.*;
public class CollectionTest {
@Test
public void test1(){
Collection collection = new ArrayList();
//add(Object e):将元素e添加到集合中
//对象e所对应的类应该重写equals()方法
collection.add("A");
collection.add(123);
collection.add(new Date());
//size():获取添加的元素个数
System.out.println(collection.size());//3
//addAll(Collection collection1):将collection1集合中的元素添加到collection中
Collection collection1 = new ArrayList();
collection1.add("B");
collection1.add(456);
collection.addAll(collection1);
System.out.println(collection);//[A, 123, Sun Nov 29 16:40:07 CST 2020, B, 456]
//clear():清空集合元素
collection.clear();
//isEmpty():判断当前集合是否为空,
System.out.println(collection.isEmpty());//true
//contains(Object obj):判断当前集合中是否包含obj,通过equals()来判断,所以自定义类需要重写equals()
System.out.println(collection1.contains("B"));//true
//containsAll(Collection coll1):判断形参coll1中的所有元素是否都存在于当前集合中
Collection coll1 = Arrays.asList(456,"B");//返回一个ArrayList
System.out.println(collection1.containsAll(coll1));//true
//remove(Object obj):从当前集合中移除obj元素,返回一个boolean,表示删除是否成功
System.out.println(collection1.remove("C") );//false
//removeAll(Collection coll3):相当于集合减法,当前集合减去和coll3的交集。
//coll2不能用Arrays.asList的方法创建,会报UnsupportedOperationException异常
Collection coll2 = new ArrayList();
coll2.add(1);
coll2.add(2);
coll2.add(3);
Collection coll3 = Arrays.asList(2,3,4);
coll2.removeAll(coll3);
System.out.println(coll2);//[1]
//retainAll(Collection coll5):取当前集合与coll5的交集并赋给当前集合,函数返回boolean
Collection coll4 = new ArrayList();
coll4.add(1);
coll4.add(2);
coll4.add(3);
coll4.add(4);
Collection coll5 = Arrays.asList(2,3);
coll4.retainAll(coll5);
System.out.println(coll4);//[2, 3]
//equals(Object obj):要想返回true,需要当前集合和形参集合的元素都相同
Collection coll6 = Arrays.asList(1,2,3);
Collection coll7 = Arrays.asList(1,2,3);
System.out.println(coll6.equals(coll7));//true
//hashCode():返回当前对象的哈希值
System.out.println(coll6.hashCode());//30817
//集合转换为数组:toArray(),返回的是一个Object类对象
Object[] array = coll6.toArray();
for(int i = 0;i < array.length;i++){
System.out.println(array[i]);//1 2 3
}
//数组转换为集合:调用Arrays类中的静态方法asList()
List<String> list = Arrays.asList(new String[]{"A", "B", "C"});
System.out.println(list);//[A, B, C]
List list1 = Arrays.asList(new int[]{1, 2, 3});
System.out.println(list1);//[[I@75bd9247]
System.out.println(list1.size());//1
List list2 = Arrays.asList(new Integer[]{1, 2, 3});
System.out.println(list2);//[1, 2, 3]
System.out.println(list2.size());//3
//iterator():返回Iterator接口的实例,用于遍历集合元素。放在IteratorTest.java中测试
}
}
package com.atguigu.java;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorTest {
//迭代器的使用
@Test
public void test1(){
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add("A");
coll.add("B");
coll.add(false);
//iterator():返回一个Iterator类的对象
Iterator iterator = coll.iterator();
System.out.println(iterator.next());//123
System.out.println(iterator.next());//456
System.out.println(iterator.next());//A
System.out.println(iterator.next());//B
System.out.println(iterator.next());//false
System.out.println(iterator.next());//报异常:NoSuchElementException
//为避免报异常:
while(iterator.hasNext()){
System.out.println(iterator.next());//123 456 A B false
}
//Iterator中remove()的使用
//内部定义了remove(),可以在遍历的时候,删除集合中的元素,此方法不同于集合直接调用remove()
Iterator iterator1 = coll.iterator();
while(iterator1.hasNext()){
Object obj = iterator1.next();
if("A".equals(obj)){
iterator1.remove();//删除集合中的"A"
}
}
}
}
- jdk5.0新特性:foreach循环遍历集合或项目
package com.atguigu.java;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collection;
public class ForTest {
@Test
public void test1(){
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add("a");
coll.add(false);
//for(集合元素的类型 局部变量 : 集合对象)
//内部仍然调用了迭代器
for(Object obj : coll){
System.out.println(obj);
}
}
}
网友评论