JAVASE——集合进阶(异常

一、异常

1.1 异常

1667313423356

解决方案:

  • 第一种:抛出异常,使用throws在方法上声明,意思就是告诉下一个调用者,这里面可能有异常啊,你调用时注意一下。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
    * 目标:认识异常。
    */
    public class ExceptionTest1 {
    public static void main(String[] args) throws ParseException{
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date d = sdf.parse("2028-11-11 10:24");
    System.out.println(d);
    }
    }
  • 第二种:try…catch捕获异常

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class ExceptionTest1 {
    public static void main(String[] args) throws ParseException{
    try {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date d = sdf.parse("2028-11-11 10:24");
    System.out.println(d);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    }
    }

1.2 自定义异常

写一个saveAge(int age)方法,在方法中对参数age进行判断,如果age<0或者>=150就认为年龄不合法,如果年龄不合法,就给调用者抛出一个年龄非法异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void main(String[] args){
try{
saveAge(223);
}catch(AgeIllegalException e){
e.printStackTrace();
System.out.println("saveAge2底层执行是出现bug的!");
}


}

public static void saveAge(int age){
if(age > 0 && age < 150){
sout("年龄保存成功: "+ age);
}else{
throw new AgeIllegalRuntimeException("/age is illegal, your age is " + age);
}
}

二、集合概述和分类

2.1 集合的分类

集合有:set, Map, List, ArrayList, LinkedList, Collection, HashMap, TreeMap, TreeSet,..

分类:一类是单列集合元素是一个一个的,另一类是双列集合元素是一对一对的。

Collection是单列集合的根接口,Collection接口下面又有两个子接口List接口、Set接口,List和Set下面分别有不同的实现类,如下图所示:

1666155169359

  • List:添加的元素是有序的,可重复的,有索引

  • Set:添加的元素是无序的,不重复,有索引

    1666155218956

2.2 Collection集合常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Collection<String> c = new ArrayList<>();
// 1. add(E e);
c.add("java1");
c.add("java1");
c.add("java2");
c.add("java2");
c.add("java3");
System.out.println(c); //打印: [java1, java1, java2, java2, java3]

// 2. size();
System.out.println(c.size()); //5

// 3. contains(obj);
System.out.println(c.contains("java1")); //true
System.out.println(c.contains("Java1")); //false

// 5. remove(E e);
System.out.println(c.remove("java1")); //true
System.out.println(c); //打印: [java1,java2, java2, java3]

// 6. clear();
c.clear();
System.out.println(c); //打印:[]

// 7. isEmpty();
System.out.println(c.isEmpty()); //true

// 8. toArray();
Object[] array = c.toArray();
System.out.println(Arrays.toString(array)); //[java1,java2, java2, java3]

// 9. c1.AddAll(c2)
Collection<String> c1 = new ArrayList<>();
c1.add("java1");
c1.add("java2");
Collection<String> c2 = new ArrayList<>();
c2.add("java3");
c2.add("java4");
c1.addAll(c2); //把c2集合中的全部元素,添加到c1集合中去
System.out.println(c1); //[java1, java2, java3, java4]


三、遍历方式

for循环遍历需要索引,只有List集合有索引,而Set集合没有索引。

3.1 迭代器遍历集合

迭代器就是一种集合的通用遍历方式。

1
2
3
4
5
6
7
8
9
10
11
12
Collection<String> c = new ArrayList<>();
c.add("aka");
c.add("kafka");
c.add("hadoop");

// 获取迭代器对象
Iterator<String> it = c.iterator();
// hasNext()判断当前位置是否有元素可获取
while(it.hasNext()){
String e = it.next();//调用next()方法获取元素,并将当月元素指向下一个位置,
System.out.println(e);
}

1666162899638

3.2 增强for遍历集合

for(数据类型 变量名 : 数组或集合)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Collection<String> c = new ArrayList<>();
c.add("赵敏");
c.add("小昭");
c.add("素素");
c.add("灭绝");

//1.使用增强for遍历集合
for(String s: c){
System.out.println(s);
}

//2.再尝试使用增强for遍历数组
String[] arr = {"迪丽热巴", "古力娜扎", "稀奇哈哈"};
for(String name: arr){
System.out.println(name);
}

3.3 forEach遍历集合

forEach方法的参数是一个Consumer接口,而Consumer是一个函数式接口,所以可以传递Lambda表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Collection<String> c = new ArrayList<>();
c.add("赵敏");
c.add("小昭");
c.add("素素");
c.add("灭绝");

//调用forEach方法
//由于参数是一个Consumer接口,所以可以传递匿名内部类
c.forEach(new Consumer<String>{
@Override
public void accept(String s){
System.out.println(s);
}
});


//也可以使用lambda表达式对匿名内部类进行简化
c.forEach(s->System.out.println(s)); //[赵敏, 小昭, 素素, 灭绝]

四、List系列集合

1666165150752

4.1 常用方法

1666165187815

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 1. 创建ArrayList集合对象
List<String> list = new ArrayList<>();
list.add("蜘蛛精");
list.add("至尊宝");
list.add("至尊宝");
list.add("牛夫人");

//2.public void add(int index, E element): 在某个索引位置插入元素
list.add(2, "紫霞仙子");
System.out.println(list);

//3.public E remove(int index): 根据索引删除元素, 返回被删除的元素
System.out.println(list.remove(2)); //紫霞仙子
System.out.println(list);//[蜘蛛精, 至尊宝, 至尊宝, 牛夫人]

//4.public E get(int index): 返回集合中指定位置的元素
System.out.println(list.get(3));

//5.public E set(int index, E e): 修改索引位置处的元素,修改后,会返回原数据
System.out.println(list.set(3,"牛魔王")); //牛夫人
System.out.println(list); //[蜘蛛精, 至尊宝, 至尊宝, 牛魔王

JAVASE——集合进阶(异常
https://wendyflv.github.io/2024/10/29/JAVASE——集合进阶(异常、集合)/
作者
Wendyflv
发布于
2024年10月29日
许可协议