个人简介
- 大家好,我是翰慧腾。一名正在努力学JAVA的大一小白,本文章为初学的笔记,希望各位多多指教。💙
- 欢迎点赞+收藏+留言💜
- 努力已经来不及,你得拼命🧡
一、集合
- 概述:集合同数组一样都是容器,但数组定义后长度、存储的数据类型不可改变;而集合是JAVA中存储对象数据的一种容器,长度、数据类型都不确定,在实际开发中常常做增删操作。但是集合只能存储引用数据类型,如果要存储基本数据类型可以选用包装类;而数组可以存储基本数据类型和引用数据类型。
- 集合类体系结构:集合可以分为单列和双列,单列就是在每一个元素只包含一个值(Collection),而双列每个元素包含两个值(Map).
二、Collection集合体系
Collection是单列集合的祖宗接口,集合都是支持泛型的,可以在编译阶段约束集合只能操作某种数据类型。见下图(来源于黑马程序员):
注意:集合和泛型都只能支持引用数据类型,不支持基本数据类型,因此集合中存储的元素都认为是对象。
List集合:添加的元素是有序、可重复、有索引。
set集合:添加的元素是无序、不重复、无索引。
代码演示:
package Stickto;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
public class Collection_ {
public static void main(String[] args) {
Collection c=new ArrayList();//多态
c.add("JAVA");
c.add("真有");
c.add("真有");
c.add("意思");
System.out.println(c);//List集合重复
Collection cc=new HashSet();//多态
cc.add("JAVA");
cc.add("真有");
cc.add("真有");
cc.add("意思");
System.out.println(cc);//Set集合重复
}
}
结果:
三、Collection常用API
API用法见代码演示:
package Stickto;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
public class Collection_1 {
public static void main(String[] args) {
Collection<String> c=new ArrayList<>();
Collection<String> cc=new HashSet<>();
//1.add方法,用于添加元素。返回值是boolean类型,检验添加元素是否成功
c.add("我爱");
c.add("JAVA");
System.out.println(c.add("JAVA"));//返回true,表示添加元素成功
System.out.println(c);//结果:[我爱, JAVA, JAVA]
/*由于上面是ArrayList,可以有重复元素,所以通常都是添加成功
* 但是在HashSet中不可以有重复元素,就有可能会添加失败
*/
cc.add("我爱JAVA");
System.out.println(cc.add("我爱JAVA"));//false,添加元素失败
//2.clear方法,用于清空集合
/*c.clear();
System.out.println(c);//结果:[]*/
//3.isEmpty方法,用于判断集合是否为空,返回值为boolean类型
System.out.println(c.isEmpty());//结果:false.集合不为空
//4.size方法,获取集合大小
System.out.println(c.size());//结果为3
//5.contains方法,用于判断集合中是否包含某个元素
System.out.println(c.contains("JAVA"));//结果:true 表示该集合包含元素JAVA
System.out.println(c.contains("java"));//结果:false 表示该集合不包含java
//6.remove方法 用于删除元素,返回值是boolean类型。判断删除元素是否成功。注意对象是Collection类型,所以只能指定元素名称删除,不能用索引值。只有List集合有索引值
System.out.println(c.remove("我爱"));//结果:true.删除成功
System.out.println(c);//结果:[JAVA, JAVA]。//若删除的元素集合中有多个,则只删除第一个,并不会全部删除。
//7.toArray方法。用于把集合装为数组。
//String[] arr=c.toArray();这样写的话会报错,通常我们会写成Object
Object[] arr=c.toArray();
//8.addAll方法,用于把另一个集合元素方法该集合
c.addAll(cc);
System.out.println(c);//结果:[JAVA, JAVA, 我爱JAVA]
}
}
迭代器遍历:遍历就是一个一个的把容器中的元素访问一遍,迭代器在JAVA中的代表是Iterator,迭代器是集合的专用遍历方式。
具体方法代码演示:
package Stickto;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Collection_2 {
public static void main(String[] args) {
Collection<String> c=new ArrayList<>();
c.add("小明");
c.add("小刚");
c.add("小兰");
c.add("小刘");
System.out.println(c);
Iterator<String> i=c.iterator();//调用iterator方法,返回此集合中的元素迭代器。
//System.out.println(i.next());开始遍历集合元素
while(i.hasNext()) {//调用Iterator中hasNext方法,判断是否有下一个元素
String ii=i.next();//调用Iterator中next方法,遍历元素
System.out.println(ii);
}
}
}
foreach遍历:既可以遍历集合也可以遍历数组,相当与是迭代器的简化写法。
只有实现Iterator接口的类才可以使用迭代器和foreach,Collection接口已经实现了Iterator接口。
格式:for(数据类型 变量名:数组名或者Collection集合名){
使用变量即可,该变量就是元素
}
代码演示:
package Stickto;
import java.util.ArrayList;
import java.util.Collection;
public class foreach_ {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] arr= {12,11,56,67,78};
//用该方法遍历数组
for(int i:arr) {
System.out.println(i);
}
//用该方法遍历集合
Collection<String> c=new ArrayList<>();
c.add("小明");
c.add("小刚");
c.add("小刘");
c.add("小韩");
for(String j:c) {
System.out.println(j);
}
}
}
结果:
Lambda表达式遍历集合:该遍历方式是jdk8以后的新技术,是一种更直接、更简单的遍历集合方式。
代码演示:
package Stickto;
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
public class Collection_3 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Collection<String> c=new ArrayList<>();
c.add("小明");
c.add("小刚");
c.add("小刘");
c.add("小韩");
c.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
// TODO 自动生成的方法存根
System.out.println(s);
}
});
//用之前学到Lambda表达式简化匿名内部类进一步简化
c.forEach(t-> System.out.println(t));
}
}
Collection集合存储自定义类型的对象:集合存储电影信息
package Stickto;
import java.util.ArrayList;
import java.util.Collection;
public class Collection_case {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Collection<movice> c=new ArrayList<>();
c.add(new movice("扬名立万",9.5,"小明"));
c.add(new movice("黑客帝国",9.2,"小刚"));
c.add(new movice("狙击手",8.9,"小张"));
for(movice m:c) {
System.out.println("片名:"+m.getName()+",评分:"+m.getScore()+",主演:"+m.getActress());
}
}
}
class movice {
private String name;
private double score;
private String actress;
public movice() {
// TODO 自动生成的构造函数存根
}
public movice(String name, double score, String actress) {
super();
this.name = name;
this.score = score;
this.actress = actress;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getActress() {
return actress;
}
public void setActress(String actress) {
this.actress = actress;
}
}