文章目录
- 一、collection集合
-
- 1.Collection集合、List接口和Set接口的关系图
- 2.创建Collection集合的格式:
- 3.Collection常用的方法(三者通用的常用方法)
- 二、List接口
-
- 1.List接口的三大特点
- 2.List接口特有方法(需要索引的方法)
- 3.ArrayList集合
- 4.LinkedList集合
- 5.Vector集合
- 三、Set接口
-
- 1.Set接口的三大特点
- 2.HashSet集合
-
- LinkedHashSet集合
一、collection集合
1.Collection集合、List接口和Set接口的关系图
2.创建Collection集合的格式:
方式一:Collection<元素类型> 变量名 = new Arraylist<元素类型>(); //只能存储<>指定的元素类型
方式二:Collection 变量名 = new Arraylist(); //集合的元素类型默认为Object
3.Collection常用的方法(三者通用的常用方法)
- (1)向集合中添加元素(集合的末尾)
boolean add(E e)
- (2)清空集合中的所有元素(但是集合还是存在的)
void clear()
- (3)查询集合中是否有某个元素(区分大小写,区分元素类型)
boolean contains(Object obj)
- (4)返回集合中的元素个数
int size()
- (5)从集合中移除某个元素,如果存在的话,返回是否移除成功(当集合中有相同的元素时,默认只移除第一个)(区分大小写)
boolean remove(Object obj)
- (6)返回包含此集合中所有元素的数组(由于不确定集合中的元素类型,所以数组的类型为Object)
Object[] toArray()
二、List接口
1.List接口的三大特点
- 有序集合(存储的顺序是一样的,怎么存进去,怎么拿出来)
- 具有索引(查找速度快)
- 可以存储重复的元素(而Set接口不能存储重复元素)
注: ArrayList与LinkedList都实现List接口,它们都不是同步的,所以都是线程不安全的。
2.List接口特有方法(需要索引的方法)
- (1)将元素插入到列表的指定索引上(其后面元素位置向后顺延一位)
add(int index,E)
注: 带有索引的操作,一定要防止索引越界问题
- (2)返回集合中指定位置(索引)处的元素
Object get(int index)
- (3)移除指定索引上的元素(E是返回被删除的元素)
E remove(int index)
- (4)修改指定索引上的元素(返回被修改之前的元素)
E set(int index,E)
3.ArrayList集合
3.1 ArrayList集合的描述
- ArrayList底层是由数组做的(本质是一个可变数组)(数组的特点:查询快,增删慢)
- 数组与集合的区别:数组在声明时就需要输入数组的长度,而集合的长度是可以变化的。并且ArrayList集合只能存储引用数据类型,不能存储基本数据类型。数组既可以存储基本数据类型,也可以存储引用数据类型。
基本数据类型 | 对应的引用数据类型(ArrayList集合的<>所填) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
- 创建ArrayList集合(对象):与其他普通的引用数据类型创建方式完全相同,但是要指定容器中存储的数据类型。
ArrayList<要存储元素的数据类型> 变量名 = new ArrayList<要存储元素的数据类型>();
3.2 ArrayList集合的常用方法
- (1)返回集合中指定位置(索引)处的元素
Object get(int index)
- (2)返回集合中的元素个数
int size()
- (3)将指定元素obj插入到集合中的指定位置(其后面的元素会以此后移一位)
boolean add(int index, Object obj)
- (4)从集合中删除指定index处的元素,并返回该元素
Object remve(int index)
- (5)清空集合中的所有元素
void clear()
- (6)用指定元素obj替代集合中指定位置上的元素
Object set(int index, Object obj)
- (7)集合元素的遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
往里放基本数据类型也没有关系,因为Java有拆箱和装箱机制。
4.LinkedList集合
4.1 LinkedList集合的描述
- 它的底层数据结构是链表,所以它查询慢,增删快。
4.2 集合中的常用方法
- (1)添加元素到链表的开头/结尾
void addFirst(E)
void addLast(E)
- (2)获取链表的开头/结尾的元素(如果链表为空获取元素会报异常)
E getFirst()
E getLast()
- (3)移除并返回链表的开头/结尾的元素
E removeFirst()
E removeLast()
5.Vector集合
- 它的底层数据结构是数组
- 它的本质和ArrayList一样(用法一样),但是它的特点是同步的,所以是线程安全的,运行速度慢
- 已经被更先进的ArrayList取代,以后也不会用
三、Set接口
1.Set接口的三大特点
- 不允许存储重复的元素,如果写了重复元素,那么只存储一个。
- Set集合取出元素的方式有:迭代器和增强for,没有普通for,因为它是无序集合,没有索引
- 注意LinkedHashSet是有序的
2.HashSet集合
2.1 HashSet集合的特点
- 由哈希表(实际上是一个HashMap实例,它的底层数据结构是哈希表(一种链表数组结合体))支持。
- 代码的编写上和ArrayList完全一致。
- 存储和取出都比较快,线程不安全,运行速度较快。
- 用add或者contains等方法来判断元素是否重复。(HashSet集合由于是无序的,其判断唯一的依据是元素类型的hashCode与equals方法的返回结果,先判断新元素与集合内已经有的旧元素的HashCode值。如果不同,说明是不同元素,添加到集合。如果相同,再判断equals比较结果。返回true则相同元素;返回false则不同元素,添加到集合。)
2.2 HashSet集合的创建
HashSet<> hs = new HashSet<>();
LinkedHashSet集合
LinkedHashSet集合的特点
- 继承自HashSet
- 它的特点,有序,存储和取出的顺序相同,但是它的父类HashSet是无序的,线程不安全的集合,不能存储重复元素。
LinkedHashSet集合的创建
Set<> set = new LinkedHashSet<>();