集合基础1:数组和集合的区别、集合的体系结构、Collection常用API、Collection的遍历方式、Collection存储自定义类型对象、ArrayList类

区别

 

 

 

 

 集合的结构体系

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Collection常用API

  • int size()
    返回此集合中的元素数。
  • boolean isEmpty()
    如果此集合不包含元素,则返回 true 。 
  • boolean contains(Object o)
    如果此集合包含指定的元素,则返回true
  • Object[] toArray()
    返回一个包含此集合中所有元素的数组。
  • boolean add(E e)
    确保此集合包含指定的元素(可选操作)。 如果此集合由于调用而更改,则返回true 。 (如果此集合不允许重复,并且已包含指定的元素,则返回false。
  • boolean addAll(Collection<? extends E> c)
    将指定集合中的所有元素添加到此集合(可选操作)。
  • boolean remove(Object o)
    从该集合中删除指定元素的单个实例(如果存在)(可选操作)。存在多个相同元素时只删除第一个、
  • void clear()
    从此集合中删除所有元素(可选操作)。 此方法返回后,集合将为空。

 

 subList(int index,int index)可以截取部分集合

 

 Collection的遍历方式

方式一:迭代器

 

 

1.得到迭代器对象 

Iterator<String> it = list.iterator();

2.循环

while(it.hasNext()){

  String ele = it.next()

  System.out.printIn(ele);

}

方式二:foreach/增强for循环

 

 

 如果在遍历过程中修改变量ele,并不会对list中的元素造成影响

方式三:lambda表达式

 

 多步简化:

 

 

Collection存储自定义类型对象

 

 

 

 

 

 

 

 结论:集合中存储的是对象的地址信息

 

 

 

 ArrayList类

 

 

 

 ArrayList常用API、遍历

 

 

 在集合中有多个相同元素时,remove方法只会删除这些相同元素的第一个元素,后面的不删除

 

 ArrayList遍历并删除元素值

 

 

 错误案例:

 

 

错误原因:当我们删除一个集合元素时,后面的集合元素会往前补位,而i在自增,跳位导致没有完全的遍历到所有的集合元素

应对方法1:在删除成功后,遍历后退一步,即i--

应对方法2:倒着遍历

 

 

package com.zjm.ArrayList;

import java.util.ArrayList;
import java.util.Arrays;

public class Demo01 {
public static void main(String[] args) {
//案例:遍历并删除集合元素值
//需求:
//某个班级的考试在系统上进行,成绩大致为: 98,77,66,89,79,50,100
//现在 需要先把成绩低于80分以下的数据去掉

ArrayList<Integer> score = new ArrayList<>();
// score.add(98);
// score.add(77);
// score.add(66);
// score.add(89);
// score.add(79);
// score.add(50);
// score.add(100);
score.addAll(Arrays.asList(98,77,66,89,79,50,100));
System.out.println(score);

for (int i = score.size() - 1; i >= 0; i--) {
if (score.get(i)<80){
score.remove(i);
}
}
System.out.println(score);

}
}

 

 ArrayList存储自定义类型对象

 

 

 

 

 

 

 

 

 元素搜索

 

 

 

 

 

 

 

 

 

 

 

package com.zjm.ArrayList;

public class Movie {
private String name;
private double score;
private String actor;

public Movie() {
}

public Movie(String name, double score, String actor) {
this.name = name;
this.score = score;
this.actor = 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;
}
}




package com.zjm.ArrayList;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Demo02 {
public static void main(String[] args) {
//旬案例影片信息在程序中的表示
//需求:某影院系统需要在后台存储上述三部电影,然后依次展示出来

//分析
//①:定义一个电影类,定义一个集合存储电影对象。
//②:创建3个电影对象,封装相关数据,把3个对象存入到集合中去。
//③:遍历集合中的3个对象,输出相关信息。

Movie m1 = new Movie("《肖生克的救赎》",9.7,"罗宾斯");
Movie m2 = new Movie("《霸王别姬》",9.5,"张国荣、张丰毅");
Movie m3 = new Movie("《阿甘正传》",9.7,"汤姆.汉克斯");

ArrayList<Movie> movies = new ArrayList<>();
movies.addAll(Arrays.asList(m1,m2,m3));
//输出的是引用类型的地址:System.out.println(movies);
//遍历输出信息:
for (int i = 0; i < movies.size(); i++) {
Movie m = movies.get(i);
System.out.println(m.getName()+"\t"+m.getScore()+"\t"+"\t"+m.getActor());
}


//根据输入的电影名称查询对应信息:
Scanner sc = new Scanner(System.in);
System.out.println("请输入电影名称:");
String name = sc.next();
Movie v = getMovieByName(movies,name);
if (v == null){
System.out.println("没有该信息!");
} else {
System.out.println("信息如下:"+"\n"+v.getName()+"\t"+v.getScore()+"\t"+"\t"+v.getActor());
}
}

/**
* 根据电影的名称来查找电影的全部信息
* @param movies 电影信息集合
* @param name 电影名称
* @return movie | null
*/
public static Movie getMovieByName(ArrayList<Movie> movies,String name){
for (int i = 0; i < movies.size(); i++) {
if (movies.get(i).getName().equals(name)){
return movies.get(i);
}
}
return null;
}
}


posted @ 2022-10-04 18:52  去公司搞点薯条  阅读(105)  评论(0)    收藏  举报