- 为了方便对多个对象的操作,就要对对象进行存储,java集合就像一种容器,可以动态地把多个对象的引用放入容器中。java集合类可以用于存储数量不等的多个对象,还可以用于保存具有映射关系的关联数组。集合、数组都是对多个数据进行存储操作的结构,简称java容器。说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储。数组在存储多个数据方面的特点:
一旦初始化以后,其长度就已经确定了数组一旦定义好,其存储数据类型确定,我们也就只能操作指定类型的数据了 数组存储多个数据的缺点:
一旦初始化以后,长度不可修改数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便,同时效率不高获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足 java集合可分为Collection和Map两种体系
Collection接口:单列数据,定义了存取一组对象的方法的集合
List:元素有序、可重复的集合(动态数组)
ArrayList/linkedList/Vector Set:元素无序、不可重复的集合(高中讲的“集合”)
HashSet/linkedHashSet/TreeSet Map接口:双列数据,保存具有映射关系“key-value对”的集合(可以多对一不能一对多)
HashMap/linkedHashMap/TreeMap/Hashtable/Properties
package CollectionP;
import org.junit.Test;
import java.io.Serializable;
import java.util.*;
public class CollectionTest {
@Test
public void test1(){
Collection coll=new ArrayList<>();
//1.add(object e):将元素e添加到集合coll中
coll.add("AA");
coll.add("BB");
coll.add(123);//自动装箱
coll.add(new Date());
//2.size():获取添加的元素的个数
System.out.println(coll.size());//4
//3.addAll():将coll1集合中的元素添加到当前的集合中
Collection coll1=new ArrayList<>();
coll1.add(456);
coll1.add("CC");
coll.addAll(coll1);
System.out.println(coll.size());//6
//4.clear():清空集合元素
coll.clear();
//5.isEmpty():判断当前集合是否为空
System.out.println(coll.isEmpty());//true
}
@Test
public void test2(){
Collection coll=new ArrayList<>();
coll.add(123);
coll.add(456);
coll.add(new String("Tom"));
coll.add(false);
//6.contains(Object obj):判断当前集合中是否包含obj
//我们在判断时会调用obj对象所在类的equals()
boolean contains = coll.contains(123);
System.out.println(contains);//true
System.out.println(coll.contains(new String("Tom")));//true,判断的是内容
//说明:向collection接口的实现类的对象中添加数据obj时,要求obj所在类要重写equals()
//7.containsAll(Collection coll1):判断形参coll中的所有元素是否都存在于当前集合中
Collection coll1= Arrays.asList(123,456);
System.out.println(coll.containsAll(coll1));//true
}
@Test
public void test3(){
//8.remove(Object obj):从当前集合中移除obj元素
Collection coll=new ArrayList<>();
coll.add(123);
coll.add(456);
coll.add(new String("Tom"));
coll.add(false);
coll.remove(123);
System.out.println(coll);//[456, Tom, false]
coll.remove(new String("Tom"));
System.out.println(coll);
//9.removeAll(Collection coll1):从当前集合中移除coll1中所有的元素
Collection coll1=Arrays.asList(123,456);
coll.removeAll(coll1);
System.out.println(coll);//[false]
}
@Test
public void test4(){
Collection coll=new ArrayList<>();
coll.add(123);
coll.add(456);
coll.add(new String("Tom"));
coll.add(false);
//10.retainAll():求两个集合的交集,修改当前集合
Collection coll1=Arrays.asList(123,456,789);
coll.retainAll(coll1);
System.out.println(coll);//[123, 456]
}
@Test
public void test5(){
Collection coll=new ArrayList<>();
coll.add(123);
coll.add(456);
coll.add(new String("Tom"));
coll.add(false);
//11.hashCode():返回当前对象的哈希值
System.out.println(coll.hashCode());
//12.集合--->数组:toArray():
Object[] objects = coll.toArray();
for(int i=0;i< objects.length;i++){
System.out.println(objects[i]);//遍历数组中所有元素
}
//13.数组--->集合
List list = Arrays.asList(new String[]{"AA", "BB", "CC"});
System.out.println(list);//[AA, BB, CC]
}
}
Iterator方法
- 集合元素的遍历操作,使用迭代器Iterator接口Iterator对象称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素:提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。迭代器模式,就是为容器而生,类似于“公交车上的售票员”Iterator仅用于遍历集合,其本身不提供承装对象的能力,如果需要创建Iterator对象,则必须有一个被迭代的集合集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。遍历操作
public void test1(){
Collection coll=new ArrayList<>();
coll.add(123);
coll.add(456);
coll.add(new String("Tom"));
coll.add(false);
Iterator iterator = coll.iterator();
//方式一:不推荐
//方式二:推荐
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
//hasNext:是否还有下一个元素
- 测试迭代器Iteratorremove()
public void test2(){
Collection coll=new ArrayList<>();
coll.add(123);
coll.add(456);
coll.add(new String("Tom"));
coll.add(false);
Iterator iterator = coll.iterator();
//删除集合中的"Tom"
while(iterator.hasNext()){
Object next = iterator.next();
if("Tom".equals(next)){
iterator.remove();
}
}
//遍历集合
iterator= coll.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
//内部定义了remove(),可以在遍历的时候,删除集合中的元素



