集合框架List&Set

195 阅读4分钟

一、介绍集合框架List和Set

  • List和Set都是接口:我们主要用接口下面实现类

二、List接口(是java.util中的类)( 凡是Iterable的实现类 都能使用增强for遍历)

  • 普通for循环

1、实现类:[ArrayList]

  • 内部基于数组实现的一个集合类。查询比较快,添加和删除相对比较慢
  • 不是同步的(存在线程安全问题)

1.1、基本使用

  • 构造方法
构造方法描述
ArrayList()构造一个初始容量为十的空列表。
ArrayList(int initialCapacity)构造具有指定初始容量的空列表。
ArrayList(Collection c)构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
  • 主要使用方法
方法名描述
boolean add(E e)增加数据
void clear()清除所有元素
boolean contains(Object o)如果此列表包含指定的元素,则返回 true
E get(int index)返回指定位置的元素
E remove(int index)删除指定位置的元素
int size()返回列表中的元素数

image.png

1.2、集合的遍历

配合一个方法get 通过索引取值

for(int i=0;i<对象名.size();i++){
	System.out.println(对象名.get(i));
}

image.png

  • 增强for循环

image.png

  • 迭代器(Iterator)
    以正确的顺序返回该列表中的元素的迭代器。 [实际上是实现的Iterable接口里面的方法]

image.png Iterator 单向的迭代器接口,从左到右依次获得数据,判断是否有下一个;获得下一个

方法描述
boolean hasNext();判断是否有下一个 如果有返回true
E next();返回下一个元素
void remove()移除下一个元素

image.png

2、实现类[LinkedList]

2.1、介绍

  • 内部是基于链表结构实现的,插入和删除比较快,查询相对ArrayList比较慢
  • 可以充当队列,堆栈
  • 不是线程安全的(同步的 )

2.2、基本使用和数组遍历和ArrayList一样

3、 ArrayList和LinkedList的区别

  • ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  • 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  • 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。 这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。

三、set接口

无序不重复的集合-->数据的添加顺序

1、HashSet实现类

是无序的集合,储存的内容不存在排序的说法

image.png

1.1、构造方法

HashSet (Java Platform SE 8 )

    • HashSet()

1.2、常用方法(没有get根据索引位置取值的方法,其他都一样)

1.3、遍历(没有普通for循环)

  • 增强for
  • 迭代器

1.4、如何判断重复的

  • 通过添加进去元素的hashCode和equals作为判断数据是否重复的标准(必须要在自定义的类中覆写hashCode和equals)
  • 如果两个对象的hashCode相等,并且两个对象调用equals结果为true才确定两个元素重复

判断重复的标准(要用必须覆写Hasret和HashCode)

Hasret和HashCode值相等才重复

2、TreeSet

存储的数据和添加的顺序和添加到顺序不一致【无序】,TreeSet里面存储的内容是有序的

2.1、 注意

不能添加两种类型的输入值,只能对同种类型的数据进行比较排序

image.png 添加其他数据就会报错

2.2、遍历方式

  • 增强for循环
  • 迭代器 set.iterator

2.3、 排序的依据

2.3.1、自然排序:

TreeSet存储的元素必须实现Comparable接口,并且覆写compareTo方法 通过方法的返回值决定 数据是否重复、正序 、倒序

2.3.2、定制排序:

  • 自己创建实现类的时候是采用比较器Comparetor接口,覆写compare方法,得有进行比较的方法,compare(Object o1,Object o2)
  • 在创建TreeSet对象的时候传入排序的规则,

image.png

  • 排序的规则:其实就是一个对象
  • 构造方法: image.png

2.4判断重复的标准

1、如果采用的是自然排序调用对象的compareTo方法,如果返回0 表示相等;

大于且返回正数,升序排列 => 小于且返回负数,升序排列 对应

大于且返回负数,降序排列 => 小于且返回正数,降序排列 对应

2、如果使用的定制排序(比较器),调用比较器的方法compare 返回0 表示相等;

大于且返回正数,升序排列 => 小于且返回负数,升序排列 对应

大于且返回负数,降序排列 => 小于且返回正数,降序排列 对应