集合是一种容器,用来按规律存放数据结构。集合只能放引用类型,不能放基本数据类型。
数组也是容器,不过数组是定长的,既可以存储基本数据类型,也可以存储引用类型。
集合的类的关系
Set
Set集合中存放的元素是无序的,不重复的。Set包括HashSet和TreeSet。
- 无序是指加入集合的顺序和集合存储的顺序不一致
- 不重复的判断方式:先判断hashCode,若不相同,则不相同,若相同,则使用equals()方法判断
- 添加重复的元素也不会报错,会有boolean类型的返回值false,并且不会存入集合中
HashSet
- 采用哈希算法来存储
- 创建HashSet对象:HashSet<Object> set = new HashSet<>(); Object可以是任意一种引用类型
TreeSet
- 创建TreeSet对象: TreeSet<Object> set = new TreeSet<>();
- 存储是按顺序存储的(从小到大),所以,TreeSet存入的对象是需要能够比较大小的(即除String和八个基本类型的包装类之外,其他的类需要实现Comparable接口的compareTo()方法)。比如有一个Student类,有私有属性id和name,name。类的实现如下:
public class Student implements Comparable<Student>{
private int id;
private String name;
public Student(int id,String name) {
super();
this.id = id;
this.name = name;
}
@Override
public int compareTo(Student o) {
if(this.id>o.id) {
return 1;
}else if(this.id==o.id) {
return 0;
}
return -1;
}
}
List
List集合中放的元素是有序的,元素允许重复
- 有序是指存储的顺序和存入的顺序相同
ArrayList
- ArrayList是类似于数组的线性存储
- 创建对象:ArrayList<类型> 对象名 = new ArrayList<>();
- 获取某一元素:get(index),index是值元素的索引,类似于数组的下标,从0开始,最大为size()-1
- 获取元素在list中第一次出现的索引值,如果没有,返回-1:int indexOf(obj)
最后一次出现的索引值:int lastIndexOf(obj) - 把某个索引位置上的元素替换为obj:set(index,obj)
LinkedList
- java中的链表的表现,相比于ArrayList可以在头部尾部添加、获取、删除元素,可以非常方便的实现stack、queue等数据结构
- ’创建对象:LinkedList<类型> 对象名 = new LinkedList<>();
LinkList与ArrayList的比较
- 存储方面:ArrayList是线性存储,LinkedList是将对象串联起来的链表
- 操作方面:ArrayList随机查找效率高,LindedlList的插入删除操作效率高
- 功能:LinkedList的功能要多于ArrayList