从头开始学java--集合(一)

刺骨的言语ヽ痛彻心扉 2022-08-06 01:15 225阅读 0赞

一.集合概述

什么是集合?

集合就是容器,存放东东的东东。存储数据用对象存,那存储对象的容器就是集合。

数组与集合的区别?

数组存储需要是固定长度的,集合长度不限。数组中对象必须是同一类型的,集合中可以是不同类型的。所以集合的类型更为广泛。

说白了,集合就是传说中的数据结构,只不过不用我们自己写了,java已经为我们提供好了一大堆集合类,我们只需要运用就可以啦,就不需要自己写那些数据结构啦!

常用的数据结构有线性表,链表,栈,树等,java中有ArrayList类等与之对应。

Collection分为两大类:

List类:元素有序,可以重复,有索引。

Set类:元素无序,不能重复,无索引。

Center

上图是java中常用的集合分类。

二.ArrayList类的使用

先看一下ArrayList类的增加,删除,清空,判断个数,判断是否为空,判断是否含有某对象等功能的例子:

  1. import java.util.*;
  2. public class CollectionTest1 {
  3. public static void main(String[] args)
  4. {
  5. //创建一个集合容器,使用collection接口
  6. ArrayList al = new ArrayList();
  7. //增加元素,add方法的参数类型是object类,集合中添加的都是对象的引用
  8. al.add("content1");
  9. al.add("content2");
  10. al.add("content3");
  11. //判断是否含有某元素
  12. System.out.println(al.contains("content1"));
  13. //获取集合元素个数,.size()方法
  14. System.out.println(al.size());
  15. //直接打印集合
  16. System.out.println(al);
  17. //删除集合元素
  18. al.remove("content1");
  19. //清空集合元素
  20. al.clear();
  21. //判断是否为空
  22. System.out.println(al.isEmpty());
  23. //取两个集合中的交集,存储在前一个集合中
  24. System.out.println(al.retainAll(al));
  25. }
  26. }

结果:

Center 1

要点:

1.集合类在包java.util中,使用之前要导入这个包中的类。

2.使用集合时,创建一个相应的对象,通过对象集合进行操作。

3.集合中如果存的是对象,那么添加的都是对象的引用而不是对象本身。

4.add参数为Object类,可以接收所有的对象。

三.迭代器

因为各种数据结构实现不同,取出功能比较复杂,所以将取出元素这个操作进行了封装,被封装在容器类中,是一个内部类,以便方便访问类中的元素。取出操作。这些内部类取出操作都符合一些规则,所以都实现了一个接口,Iterator。如果我们自己设计了一个数据结构,实现这个接口也就实现了迭代器的功能。

  1. import java.util.*;
  2. public class CollectionTest2 {
  3. public static void main(String[] args)
  4. {
  5. ArrayList al = new ArrayList();
  6. al.add("content1");
  7. al.add("content2");
  8. al.add("content3");
  9. //获取迭代器的引用值,用it保存(迭代器是内部类,在创建外部类时已经创建了接口)
  10. Iterator it = al.iterator();
  11. //it.hasNext方法,判断是否有元素,如果有返回真,否则为假
  12. while(it.hasNext())
  13. {
  14. //it.next返回当前元素
  15. System.out.println(it.next());
  16. }
  17. }
  18. }

要点:

1. 迭代器是一个内部类,实现一个接口。使用迭代器的时候,通过接口调用,用集合类的.iterator()方法返回迭代器在建立集合时建立的内部类对象实例。

2. 迭代器常用的方法.hasNext()判断是否还有元素。

3. 迭代器常用方法.Next(),返回迭代器中的下一个元素。

四.List集合

上面说过,List类中有索引,元素是有序的,可以重复。

所以List类中有一些特有的方法,即可以操作脚标的方法都是List的方法。

  1. import java.util.*;
  2. public class ListTest1 {
  3. public static void main(String[] args)
  4. {
  5. ArrayList al = new ArrayList();
  6. al.add("content1");
  7. al.add("content2");
  8. al.add("content3");
  9. //在指定位置添加元素
  10. al.add(1, "content0");
  11. System.out.println(al);
  12. //删除指定位置元素
  13. al.remove(1);
  14. System.out.println(al);
  15. //修改指定位置元素
  16. al.set(1, "content8");
  17. System.out.println(al);
  18. //通过脚标获取元素
  19. System.out.println(al.get(1));
  20. //通过脚标遍历
  21. for (int i = 0; i < al.size(); i++)
  22. {
  23. System.out.println(al.get(i));
  24. }
  25. //获取对象脚标
  26. System.out.println("index of content1 = " + al.indexOf("content1"));
  27. }
  28. }<strong>
  29. </strong>

要点:

List集合特有的方法一般都是跟脚标有关的。

五.List迭代器

当用迭代器操作时,我们有时也希望操作集合。但是我们在迭代的时候,用集合方式修改时会发生一些奇怪的异常:

  1. import java.util.*;
  2. public class ListTest2 {
  3. public static void main(String[] args)
  4. {
  5. ArrayList al = new ArrayList();
  6. al.add("content1");
  7. al.add("content2");
  8. al.add("content3");
  9. //如果我们用迭代器时,想通过Collection的方法修改List,会出现异常
  10. Iterator it = al.iterator();
  11. while(it.hasNext())
  12. {
  13. Object obj = it.next();
  14. if (obj.equals("content1"))
  15. al.add("content0");
  16. System.out.println(it.next());
  17. }
  18. }
  19. }

结果:

Center 2

这个异常是说对象被并发修改时引发的异常。就是说要么用集合方式,要么用迭代器方式修改。

用迭代器方式修改时,方法比较少,只有三个方法,hasnext(),next(),remove()。

所以在这里我们如果想要用其他的方法,如添加或修改时,就要用派生于迭代器的List迭代器进行操作。

  1. import java.util.*;
  2. public class ListTest2 {
  3. public static void main(String[] args)
  4. {
  5. ArrayList al = new ArrayList();
  6. al.add("content1");
  7. al.add("content2");
  8. al.add("content3");
  9. //如果我们用迭代器时,想通过Collection的方法修改List,会出现异常
  10. ListIterator it = al.listIterator();
  11. while(it.hasNext())
  12. {
  13. Object obj = it.next();
  14. if (obj.equals("content1"))
  15. //增加
  16. it.add("content0");
  17. }
  18. System.out.println(al);
  19. //List还可以反向遍历
  20. while (it.hasPrevious())
  21. {
  22. System.out.println(it.previous());
  23. }
  24. }
  25. }

结果:

Center 3

要点:

1.对于集合正在迭代的时候,要么用集合方式,要么用迭代器方式修改,不能同用,否则会引发异常。

2.使用List迭代器,可以比普通迭代器增加一些功能。

六.List子类特点

List分为ArrayList,LinkList,Vector三种

特点:

ArrayList:底层数据结构用数组实现。查询速度很快,增删稍慢,线程不同步(默认长度是10,如果超过了10,那么就会新建一个大数组,将原来的东东拷贝到新的数组中)

LinkList:底层数据结构用链表实现。增删速度很快,查询速度稍慢

Vector:底层数据结构是数组结构,现在很少使用了。线程同步。

Center 4

其他知识点:三种List类型集合使用。

发表评论

表情:
评论列表 (有 0 条评论,225人围观)

还没有评论,来说两句吧...

相关阅读

    相关 从头开始java--包

    一.包的定义 包的作用:一是解决类文件的重名问题,与C++的命名空间差不多。二是便于对类的分类管理,相关功能的类放在一个包中,提供可复用资源一般就是提供一个包。

    相关 从头开始java--异常处理

    一.异常的定义 异常是程序在运行时发生的不正常情况。 java的面向对象实在是忒牛了!不正常情况也被封装成了一个对象。 异常有两种,一种严重的,用Er

    相关 从头开始java--多态

    一.多态的定义 何谓多态?多态可以理解为事物存在的多种体现形态。同一种事物,在不同条件下,表现为不同的结果。 举个例子,有一只猫,还有一只狗,统称为动物