【Collection】集合特点
public class Test {
public static void main(String[] args) {
//ArrayList:有序 可重复 存在索引
Collection list = new ArrayList();
list.add("Mybatis");
list.add("Spring");
list.add("HTML");
list.add(20);
list.add(20);
list.add(false);
list.add(true);
System.out.println(list);
System.out.println("----------------------");
//HashSet:无需 无重复 无索引
Collection set = new HashSet();
set.add("Mybatis");
set.add("Spring");
set.add("HTML");
set.add(20);
set.add(20);
set.add(false);
set.add(true);
System.out.println(set);
}
}
【注意】:集合和泛型都只能支持引用数据类型,不支持基本数据类型,所有集合中存储的元素都认为是对象
集合中要存基本数据类型的解决方法:
public class Test {
public static void main(String[] args) {
//ArrayList:无需 不重复 五索引
//1.添加元素,添加成功返回true
Collection<String> list = new ArrayList<>();
list.add("Java");
list.add("MyBatis");
list.add("Java");
list.add("HTML");
list.add("浩楠");
System.out.println(list);
//2.清空集合的元素
//list.clear();
//System.out.println(list);
//3.判断集合是否为空,是空返回true,反之false
System.out.println(list.isEmpty());
//4.获取集合的大小
System.out.println(list.size());
//5.判断集合中是否包含某个元素
System.out.println(list.contains("浩楠"));
//6.删除某个元素(如果有多个重复元素,删除前面的第一个)
System.out.println(list.remove("Java"));//true
System.out.println(list.remove("java"));//false
//7.把集合转成数组并输出
Object[] array = list.toArray();
System.out.println(Arrays.toString(array));
System.out.println("----------------拓展----------------");
//API:list.addALL
Collection<String> list1 = new ArrayList<>();
list1.add("Java");
list1.add("浩楠");
list1.add("程明辉");
Collection<String> list2 = new ArrayList<>();
list2.add("李泽");
list2.add("吴赛");
list1.addAll(list2);
System.out.println(list1);
System.out.println(list2);
}
}
public class Test {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("Java");
list.add("马浩楠");
list.add("程明辉");
list.add("李泽");
list.add("吴赛");
//1.得到当前集合的迭代器
Iterator<String> i = list.iterator();
//2.定义循环,使用方法遍历数据
while(i.hasNext()){
System.out.println(i.next());
}
}
}
public class Test {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("Java");
list.add("马浩楠");
list.add("程明辉");
list.add("李泽");
list.add("吴赛");
//使用增强for来遍历数组或集合
for(String ele:list){
System.out.println(ele);
}
}
}
public class Test {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("Java");
list.add("马浩楠");
list.add("程明辉");
list.add("李泽");
list.add("吴赛");
//使用Lambda表达式遍历集合
/*list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});*/
//简化
/*list.forEach((String s)->{
System.out.println(s);
});*/
//再简化
//list.forEach(s -> System.out.println(s));
//再再简化
list.forEach(System.out::println);
}
}
【需求】:某电影院系统需要在后台存储下述三部电影,然后一次展示出来
public class Movie {
private String name;
private double score;
private String actor;
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 getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
public Movie() {
}
public Movie(String name, double score, String actor) {
this.name = name;
this.score = score;
this.actor = actor;
}
}
public class Test {
public static void main(String[] args) {
Collection<Movie> movies = new ArrayList<>();
movies.add(new Movie("《你好,李焕英》",9.5,"张小斐,嘉玲,沈腾"));
movies.add(new Movie("《唐人街探案》",8.5,"王宝强,刘昊然"));
movies.add(new Movie("《刺杀小说家》",8.6,"雷佳音,杨幂"));
//遍历
for (Movie movie : movies) {
System.out.println("片名:"+movie.getName());
System.out.println("评分:"+movie.getScore());
System.out.println("演员:"+movie.getActor());
System.out.println("-----------------------------");
}
}
}
特点
二叉查找树
红黑规则
多的看视频回顾。
public class Test {
public static void main(String[] args) {
//1.创建一个ArrayList集合对象,并添加几条元素
//List:有序,可重复,有索引
List<String> list = new ArrayList<>();
list.add("Java");
list.add("HTML");
list.add("马浩楠");
list.add("程明辉");
list.add("李泽");
list.add("吴赛");
//2.在某个索引位置插入元素
list.add(2,"林燕");
System.out.println(list);
//3.根据索引删除元素,返回被删除元素
System.out.println(list.remove(1));
System.out.println(list);
//4.根据索引获取元素
list.get(3);
//5.修改索引位置的元素值
list.set(0,"嗯哈");
System.out.println(list);
}
}
问题
存在问题的遍历方式
public class Test {
public static void main(String[] args) {
//1.准备数据
ArrayList<String> list = new ArrayList<>();
list.add("马浩楠");
list.add("Java");
list.add("Java");
list.add("程明辉");
list.add("李泽");
list.add("吴赛");
//需求:删除全部Java信息
//删除方式一:迭代器删除
/*Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
String ele = iterator.next();
if(ele.equals("Java")){
//list.remove("Java");会报错
iterator.remove();//使用迭代器删除当前位置元素,保证不后移
}
}*/
//删除方式二:foreach遍历删除(存在bug)
/*for (String s : list) {
if("Java".equals(s)){
list.remove("Java");
}
}*/
//删除方式三:lambda表达式删除(存在bug)
/*list.forEach(e->{
if("Java".equals(e)){
list.remove("Java");
}
});*/
//删除方式四:for循环删除
for (int i = 0; i < list.size(); i++) {
if ("Java".equals(list.get(i))) {
list.remove("Java");
i--;//用此运算来防止后移
}
}
System.out.println(list);
}
}
public class Test {
public static void main(String[] args) {
String[] names = {"马浩楠","程明辉","李泽","吴赛"};
printArray(names);
Integer[] ages = {21,22,80,13};
printArray(ages);
}
public static <T>void printArray(T[] arr){
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]).append(i == arr.length-1 ? "" : ", ");
}
sb.append("]");
System.out.println(sb);
}
}
作用:编译阶段可以指定数据类型,类似于集合的作用
案例
public class MyArrayList<T> {
public static void main(String[] args) {
MyArrayList<String> mylist = new MyArrayList<>();
mylist.add("马浩楠");
}
public void add(T t){
System.out.println("添加"+t);
}
public void remove(T t){
System.out.println("删除");
}
}
Data接口
public interface Data<E> {
void add(E e);
void delete(int id);
void update(E e);
void selectById(int id);
}
Student实现类
public class Student implements Data<Student>{
@Override
public void add(Student student) {
}
@Override
public void delete(int id) {
}
@Override
public void update(Student student) {
}
@Override
public void selectById(int id) {
}
}
Teacher实现类
public class Teacher implements Data<Teacher>{
@Override
public void add(Teacher teacher) {
}
@Override
public void delete(int id) {
}
@Override
public void update(Teacher teacher) {
}
@Override
public void selectById(int id) {
}
}
通配符:?
案例
public class Demo {
public static void main(String[] args) {
ArrayList<Ben> bens = new ArrayList<>();
bens.add(new Ben());
bens.add(new Ben());
bens.add(new Ben());
go(bens);
ArrayList<Bao> baos = new ArrayList<>();
baos.add(new Bao());
baos.add(new Bao());
baos.add(new Bao());
baos.add(new Bao());
go(baos);
ArrayList<Dog> dogs = new ArrayList<>();
dogs.add(new Dog());
dogs.add(new Dog());
dogs.add(new Dog());
//go.add(dogs);//不能使用,不符合逻辑,因此加上? extends Car限制引用类型
}
//开始比赛
public static void go(ArrayList<? extends Car> ele){
}
}
class Ben extends Car{
}
class Bao extends Car{
}
class Car{
}
class Dog{
}