Java基础---集合类
-
为什么出现集合类
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常见的一种方式
-
数组和集合类同是容器,有何不同?
数组虽然可以存储对象,但长度是固定的:集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。
-
集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
image.png1.ArrayList
-
1.add方法的参数类型是Object,以便于接收任意类型对象
-
2.集合中存储都是对象的引用(地址)
//创建一个集合容器,使用Collection接口的子类,ArrayList
ArrayList a1 = new ArrayList();
//添加元素
a1.add("java01");
a1.add("java02");
a1.add("java03");
a1.add("java04");
//打印原集合
System.out.println(a1);
//删除元素
a1.remove("java02");
//删除后的集合
System.out.println(a1);
//判断元素是否存在
System.out.println("java03是否存在"+a1.contains("java03"));
//获取个数,集合的长度
System.out.println("size:"+a1.size());
//清除集合元素
a1.clear();
System.out.println("size:"+a1.size());
System.out.println("集合是否为空?"+a1.isEmpty());
运行结果:
[java01, java02, java03, java04]
[java01, java03, java04]
java03是否存在true
size:3
size:0
集合是否为空?true
-
去交集
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);//去交集,all中只会保留和a2中相同的元素
a1.removeAll(a2);//去掉a1中与a2中元素相同的元素
System.out.println("a1:"+a1);
System.out.println("a2:"+a2);
运行结果:
a1:[java01, java02]
a2:[java01, java02, java05, java06]
a1:[]
a2:[java01, java02, java05, java06]
-
取出元素-迭代器(Iterator)
增
add(index,element);
addAll(index,Colllection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(from,to);
listIterator();
ArrayList a1 = new ArrayList();
//添加元素
a1.add("java01");
a1.add("java02");
a1.add("java03");
a1.add("java04");
//修改元素
a1.set(1,"java05");
//get(1)通过角标获取元素
for(int x = 0;x< a1.size(); x++){
System.out.println("a1("+ x +") = "+ a1.get(x));
}
Iterator it = a1.iterator();
while(it.hasNext()){
System.out.println("next:"+ it.next());
//通过indexOf获取对象的位置
System.out.println("index="+a1.indexOf("java03"));
}
运行结果:
a1(0) = java01
a1(1) = java05
a1(2) = java03
a1(3) = java04
next:java01
next:java05
next:java03
next:java04
index=2
//通过下标获取一个子List
List sub = a1.subList(1,3);
System.out.println("sub="+sub);
sub=[java05, java03]
2.HashSet
-
Set:元素是无序,元素不可以重复,该集合体系没有索引
Set和Collection的功能是一致
|---HashSet底层结构是哈希表
存储唯一元素并允许空值
保持插入顺序
不是线程安全的
|---TreeSet
Set<String>hashSet = new HashSet<>();
hashSet.add("String add01");
hashSet.add("String add02");
hashSet.add("String add03");
hashSet.add("String add04");//true
hashSet.add("String add04");//faulse
hashSet.add("String add04");//faulse
System.out.println(hashSet);
和表中存储的时候的顺序不一定一致,保持唯一性,存储多个相同的值,是存储不进去的
运行结果:
[String add01, String add04, String add03, String add02]