List与Set

1.集合的概念

1、集合是Java API所提供的一系列类,可以用于动态存放多个对象。–集合只能存对象
2、集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定,只要是引用类型
3、集合类全部支持泛型,是一种数据安全的用法。

2.集合框架图

  • Java的集合框架从整体上可以分为两大家族。
    1、Collection(接口)家族。该接口下的所有子孙均存储的是单一对象
    2、Map(接口)家族。该接口下的所有子孙均存储的是**key-value(键值对)**形式的数据。

  • 另外还有三个分支,均是为上述两大家族服务的。
    1、Iterator(迭代器)家族。主要用于遍历Colleciton接口的及其子类而设计。
    2、Comparator(比较器), 在集合中存储对象时候,用于对象之间的比较
    Collecitons是工具类。注意该类名带个s,一般就表示工具类。里面提供了N多静态方法,来对Colleciton集合进行操作。
    在这里插入图片描述

3.Collection接口

3.1Collection接口概述
  • Collection接口-定义了存取对象的方法。有两个非常常用的子接口:
  • List接口:存放的元素有序且允许有重复的集合接口。
  • Set接口:存放的元素无序不包含重复的集合接口。
3.2Collection接口中的常用方法

1、int size(); 返回此collection中的元素数。
2、boolean isEmpty(); 判断此collection中是否包含元素。
3、boolean contains(Object obj); 判断此collection是否包含指定的元素。
4、boolean contains(Collection c); 判断此collection是否包含指定collection中的所有元素。
5、boolean add(Object element); 向此collection中添加元素。
6、boolean addAll(Collection c);将指定collection中的所有元素添加到此collection中
7、boolean remove(Object element); 从此collection中移除指定的元素。
8、boolean removeAll(Collection c); 移除此collection中那些也包含在指定collection中的所有元素。
9、void clear(); 移除些collection中所有的元素。
10、boolean retainAll(Collection c); 仅保留此collection中那些也包含在指定collection的元素。
11、Iterator iterator(); 返回在此collection的元素上进行迭代的迭代器。
12、Object[] toArray(); 把此collection转成数组。

4.List接口

4.1.List接口概述

List中的元素是有序的,且允许重复。重点掌握ArrayList和LinkedList

4.2.List接口相比Colleciton接口的新增方法
  • List接口比Collection接口中新增的几个实用方法:
    1、public Object get(int index) 根据下标,返回列表中的元素
    2、public Object add(int index, Object element);  在列表的指定位置插入指定元素.将当前处于该位置的元素(如果有的话)和所有后续元素向右移动
    3、public Object set(int index, Object element) ; 用指定元素替换列表中指定位置的元素
    4、public Object remove(int index) 移除列表中指定位置的元素
    注意:list集合中的元素的索引与数组中元素的索引一样,均是从0开始。
4.3.List实现类之ArrayList集合

ArrayList相比數組的區別?容量的可扩展性,数据类型只要是Object类型就行,存储的必须是对象,不能存储基础数据类型。
在这里插入图片描述

4.4.List实现类之LinkedList集合

在这里插入图片描述
这就是面向接口编程的好处。

5.Iterator(迭代器)接口

5.1.Iterator概述
  • 通过上面的学习,我们知道可以采用两个方式来遍历我们的List集合,其实API已经为我们准备了更专业的遍历工具,专门来遍历我们集合中的元素,包括我们后面要学习到的Set集合。这个工具就叫–迭代器
    • Iterator对象称作迭代器,以类似指针的方式来遍历我们的集合元素。
5.2.获得Iterator对象
  • 调用集合对象的iterator()方法,可以获得一个与该集合对象关联的迭代器对象。
    例如:
List list = new ArrayList<>();  
Iterator iterator = list.iterator();  //获得Iterator对象
5.3.Iterator的常用方法
  • Iterator定义如下两个方法:
    boolean hasNext(); //判断游标右边是否有元素。如果有返回true,否则false
    Object next() ; //返回游标右边的元素并将游标移动到下一个位置

6.泛型(Generic)的使用

6.1.集合中使用泛型

上面我们的程序存在严重的安全隐患!

  • JDK1.4以前不能使用泛型的弊端:
    1、装入集合的数据都会被当作Object对象来存放,从而失去了自己的实际类型。
    2、从集合中取出元素时,需要进行强制类型转换。效率低,容易产生错误。
    从JDK1.5开始,sun公司推出了泛型来解决上述问题:
    1、在定义一个集合时就指定集合存储的对象的数据类型
    如:List list = new ArrayList<>();
    2、存入数据时只能存入泛型指定的数据类型,如果存入其他数据类型,则会编译错误,避数据存入时的问题。
    list.add(1); //编译错误!
    3、从集合中取出元素时,无需转型了。
    如:Student st = it.next();
  • 优点
    1、简化集合的使用
    2、增强代码的可读性和稳定性

7.Set接口

1.Set接口:存放的元素无序不包含重复的集合接口。重点掌握HashSet和TreeSet

7.1.Set实现类之HashSet集合
  • 掌握HashSet的使用,以及感受它的唯一无序的特点
  • 分析思考,HashSet怎么保证了唯一性?
  • 存储自定义类对象
    • 实验看是否可以保证唯一性
    • 问题:如果hashcode返回的结果都一样,可以吗?
  • 小技巧,自动生成相关方法(hashcode,equals)
7.2.Set实现类之TreeSet集合
  • 掌握TreeSet的使用,以及感受它的可排序,唯一的特点
  • 分析思考,HashSet怎么保证了可排序和唯一性?
  • 存储自定义类对象
    • 实验看是否可以保证可排序与唯一性
    • 能够按照某种规则对元素进行排序,且唯一,排序两种方式如下:
      (1),自然排序
      (2),比较器进行比较
发布了11 篇原创文章 · 获赞 17 · 访问量 3897

猜你喜欢

转载自blog.csdn.net/qq_46288317/article/details/104656807