目录
一、List集合的概述
ArrayList集合类的概述
ArrayList集合的语法定义
ArrayList集合的常用方法
LinkedList集合概述
LinkedList集合的语法定义
LinkedList集合类常用方法
二、Set集合
set集合的概述
HashSet集合的概述
HashSet集合的语法定义
HashSet集合的常用方法
在自定类使用HashSet集合确保唯一性的演示
LinkedHashSet集合类
LinkedHashSet集合类的语法定义
三、集合总结
List集合与Set集合的区别
ArrayList与LinkedList集合类的区别
HashSet与LinkedHashSet集合类的区别
一、List集合的概述
解析:
1.List 是一个有序、可重复的集合,集合中每个元素都有其对应的顺序索引。
2.List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。
3.List 集合默认按元素的添加顺序设置元素的索引,第一个添加到 List 集合中的元素的索引为 0,第二个为 1,依此类推。
4.List 实现了 Collection 接口,它主要有两个常用的实现类:ArrayList 类和 LinkedList 类。
5.List集合的长度可变,且其中的数据类型只能为引用类型。
解析:
1.ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素,且固定只能存储引用数据类型的元素。
2.ArrayList 继承了 AbstractList ,并实现了 List 接口。
3.它还提供了快速基于索引访问元素的方式,对尾部成员的增加和删除支持较好。
4.使用 ArrayList 创建的集合,允许对集合中的元素进行快速的随机访问,不过,向 ArrayList 中插入与删除元素的速度相对较慢。
解析:
ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式如下:
import java.util.ArrayList; // 引入ArrayList类
ArrayList<E> objectName = new ArrayList<>(); // 初始化
其中:
1.E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
2.objectName: 对象名。
List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操作集合的特有方法,如下:
1.public void add(int index, E element): 作用:将指定的原数,添加到该集合中的指定位置上。
注意:其index值不能超过该集合长度,否则将会报IndexOutOfBoundsException异常。
2.public E get(int index): 作用:返回集合中指定的位置的元素。
3.public E remove(int index):作用:移除列表中指定位置的元素,返回的是被移除的元素。
注意:若当前集合中存在多个重复元素时,使用该方法移除此元素时,只会移除从头开始遍历时遇到的第一个元素。
4.public E set(int index, E element):作用:用指定元素替换集合中指定位置的元素,返回值为更新前的元素。
注意:index索引值不应超过该集合的下标值,否则将会报IndexOutOfBoundsException异常。
使用代码演示:
package com.feisi.week5.day1;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
// 添加方法
list.add("小红");
list.add("小明");
list.add("小蓝");
list.add(3,"小小");
// 添加后遍历数组
for (String s:list
) {
System.out.println(s);
}
System.out.println("-----------");
// 删除方法
System.out.println(list.remove(0));
// 验证是否移除成功
System.out.println(list.size());
// 修改方法
System.out.println("-----------");
System.out.println(list.set(2,"xiaoming"));
// 验证是否添加成功
for (String s : list) {
System.out.println(s);
}
// 查询方法 根据索引下标查询
//list.contains("小蓝");
String s = list.get(1);
System.out.println(s);
}
}
运行结果:根据结果可证实上述方法的作用
解析:
1.LinkedList 类采用链表结构保存对象,这种结构的优点是便于向集合中插入或者删除元素。
2.需要频繁向集合中插入和删除元素时,使用 LinkedList 类比 ArrayList 类效果高,但是 LinkedList 类随机访问元素的速度则相对较慢。这里的随机访问是指检索集合中特定索引位置的元素。
3.它也是长度可变的集合,且集合也是元素有序可重复也是只能存引用数据类型。
解析:
LinkedList 类位于 java.util 包中,使用前需要引入它,语法格式如下:
import java.util.LinkedList; // 引入LinkedList类
LinkedList<E> objectName = new LinkedList<>(); // 初始化
其中:
1.E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
2.objectName: 对象名。
1.public void addFirst(E e):作用:将指定元素插入此集合列表的开头。
2.public void addLast(E e):作用:将指定元素添加到此列表的结尾。
3.public E getFirst():作用::返回此列表的第一个元素。
4.public E getLast():作用:返回此列表的最后一个元素。
5.public E removeFirst():作用:移除并返回此列表的第一个元素。
6.public E removeLast():作用:移除并返回此列表的最后一个元素。
7.public E pop():作用:从此列表所表示的堆栈处弹出一个元素,所弹出的是该列表的第一个元素。
注意:其实际作用与该类的removeFirst()方法作用相同。
8.public void push(E e):作用:将元素推入此列表所表示的堆栈。
注意:此方法实际作用与该类的addFirst(E e)方法作用相同。
9.public boolean isEmpty():作用:如果列表不包含元素,则返回true,用于判断该集合列表是否为空。
注意:其LinkedList是List的子类,List中的方法LinkedList都是可以使用,上述的是该类的特有方法。
代码使用演示:只演示其中的3中方法,方法的使用都是按照应用场景不同进行。
package com.feisi.week5.day1;
import java.util.LinkedList;
public class Test {
public static void main(String[] args) {
LinkedList<String> list1 = new LinkedList<>();
list1.add("小红");
list1.add("小明");
list1.add("小蓝");
list1.add("小小");
//弹出该集合列表的第一个元素
list1.pop();
for (String s : list1) {
System.out.println(s);
}
System.out.println("---------------");
// 删除该集合列表的第一个元素
list1.removeFirst();
for (String s : list1) {
System.out.println(s);
}
System.out.println("---------------");
// 将该元素添加到集合的第一位
list1.addFirst("xiaoming");
for (String s : list1) {
System.out.println(s);
}
}
}
运行结果:由运行结果可看出上述方法的应用
二、Set集合
解析:
1.Set 集合类似于一个罐子,程序可以依次把多个对象“丢进”Set 集合,而 Set 集合通常不能记住元素的添加顺序。
2.也就是说 Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合。Set 集合中不能包含重复的对象,并且最多只允许包含一个 null 元素。
3.Set集合的特点就是元素无序且元素不能重复。
解析:
1.java.util.Hashset是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不能保证不一致)。
2.HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时就是使用这个实现类。HashSet 是按照 Hash 算法来存储集合中的元素。因此具有很好的存取和查找性能。
3.保证元素唯一性的方式依赖于:hashCode
与equals
方法。
解析:
HashSet类位于 java.util 包中,使用前需要引入它,语法格式如下:
import java.util.HashSet; // 引入LinkedList类
HashSet<E> objectName = new HashSet<>(); // 初始化
其中:
1.E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
2.objectName: 对象名。
1.public boolean add(E e):作用:把给定的对象添加到当前集合中时使用。
2.public void clear():作用:一次性清空集合中的所有元素慎用。
3.public boolean remove(E e):作用:传入指定参数对象在当前集合中删除。
4.public boolean contains(Object obj):作用:判断当前集合中是否包含给定的对象参数。
5.public boolean isEmpty():作用:判断当前集合是否为空。
6.public int size():作用:得到当前集合的长度。
注意:在使用其中的add方法时不要添加重复的元素,Set集合是不会存储重复的元素,只会按顺序存储第一次出现的元素,这是为了保证元素的唯一性。
代码演示:这里只演示不能存放重复元素及存放顺序不一致。
package com.feisi.week5.day1;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
System.out.println("---------------");
HashSet<String> set = new HashSet<>();
set.add("小胡");
set.add("小器");
set.add("小花");
set.add("小胡");
// 顺序不唯一
for (String s1 : set) {
System.out.println(s1);
}
}
}
运行结果:由结果可看出存放顺序和添加顺序不一致且不会存放重复元素,这是因为在String 类中重写了hashCode
与equals
方法,确保了String类型元素的唯一性。
自定义Student类:该类中是由Id属性来确保该对象的唯一性,在实践的开发过程中我们也应该考虑到该类型对象是由那个属性来确定唯一性。
package com.feisi.week5.day1;
import java.util.Objects;
public class Student {
private int id;
private String name;
private int age;
public Student() {
}
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
// 重写这两个方法是为了保证使用HashSet集合中对象根据id来判断是否唯一,由id来确定该对象是否重复
// 重写的equals方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
Student student = (Student) o;
return getId() == student.getId();
}
// 重写的hashCode方法
@Override
public int hashCode() {
return Objects.hash(getId());
}
}
Test测试类:
package com.feisi.week5.day1;
import java.util.HashSet;
public class Test1 {
public static void main(String[] args) {
HashSet<Student> set = new HashSet<>();
set.add(new Student(1, "小明", 20));
set.add(new Student(2, "小花", 20));
set.add(new Student(3, "小蓝", 20));
set.add(new Student(4, "小明", 20));
set.add(new Student(1, "小明", 20));
// 使用增强for循环遍历集合
for (Student student : set) {
System.out.println(student);
}
}
}
运行结果:由此运行结果即可清楚
解析:
1. java.util.LinkedHashSet,它是链表和哈希表组合的一个数据存储结构,其中的元素是有序存放的,且不可重复
2.该类中的常用的增删方法,与HashSet集合类中基本一致,因为该类继承与HashSet类,而且还有一些属于自己的特有方法,根据需求来使用,想要了解的去查看javaAPI文档。
解析:
LinkedHashSet类位于 java.util 包中,使用前需要引入它,语法格式如下:
import java.util.LinkedHashSet; // 引入LinkedList类
LinkedHashSet<E> objectName = new LinkedHashSet<>(); // 初始化
其中:
1.E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
2.objectName: 对象名。
代码使用演示:主要是演示该集合类中的元素是按照插入时的顺序排序的是有序的,且不重复
package com.feisi.week5.day1;
import java.util.LinkedHashSet;
public class Test2 {
public static void main(String[] args) {
// 创建集合类
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("小胡");
linkedHashSet.add("小器");
linkedHashSet.add("小花");
linkedHashSet.add("小胡");
// 验证该类是否有序且不重复集合
for (String s : linkedHashSet) {
System.out.println(s);
}
}
}
运行结果:
三、集合总结
解析
1.List集合中的元素有序且可重复,Set集合中的元素不可重复,该接口不同的实现子类有的集合有序有的无序。
-
ArrayList与LinkedList集合类的区别
解析:
1.ArrayList 与 LinkedList 都是 List 接口的实现类,因此都实现了 List 的所有未实现的方法,只是实现的方式有所不同。
2.在频繁的使用查询修改集合元素时使用ArrayList类定义的集合较好。
3.需要频繁向集合中插入和删除元素时,使用 LinkedList 类比 ArrayList 类效果高。
4.ArrayList类占用空间大,而执行效率高。
5.LinkedList类占用空间小,而执行效率慢。
-
HashSet与LinkedHashSet集合类的区别
解析:
1.LinkedHashSet集合类继承与HashSet类,父类中所有的方法它都有,且父类集合的元素是无序的,而LikedHashSet集合类的元素是按照插入的顺序排序的,故而是有序的。
2.由于LinkedHashSet集合类要维护按照插入时的次序,因此性能要低于HashSet集合类。
3.当要操作大量的数据或是需要遍历集合所有的数据时使用LinkedHashSet会比HashSet要好一些,因为该类使用链表来维护内部顺序。