List集合
java.util.List接口 extends Collection接口
特点:
-
有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123)
-
有索引,包含了一些带索引的方法
-
允许存储重复的元素
List接口中带索引的方法(特有)
-
public void add(int index, E element) :将指定的元素,添加到该集合中的指定位置上
-
public E get(int index) :返回集合中指定位置的元素
-
public E remove(int index) :移除列表中指定位置的元素,返回的是被移除的元素
-
public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素
注意:
操作索引的时候,一定要防止索引越界异常
IndexOutOfBoundsException:索引越界异常,集合会报
ArrayIndexOutOfBoundsException:数组索引越界异常
StringIndexOutOfBoundsException:字符串索引越界异常
List的子类
ArrayList集合
java.util.ArrayList集合数据存储的结构是数组结构。元素的增删慢,查找快,由于日常开发中使用最多的功能为查询数据,遍历数据,所以ArrayList集合是最常用的集合。
许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。
LinkedList集合
java.util.LinkedList集合 implements List接口
特点:
-
底层是一个链表结构:查询慢,增删快
-
里边包含了大量操作首尾元素的方法
注意:使用LinkedList集合特有的方法,不能使用多态
-
public void addFirst(E e) :将指定元素插入此列表的开头
-
public void addLast(E e) :将指定元素添加到此列表的结尾
-
public void push(E e):将元素推入此列表所表示的堆栈。
-
public E getFirst() :返回此列表的第一个元素
-
public E getLast():返回此列表的最后一个元素。
-
public E removeFirst():移除并返回此列表的第一个元素。
-
public E removeLast():移除并返回此列表的最后一个元素。
-
public E pop():从此列表所表示的堆栈处弹出一个元素。
-
public boolean isEmpty():如果列表不包含元素,则返回true
Set接口
java.util.Set<E>接口 extends Collection接口
特点:
-
不允许存储重复的元素
-
没有索引,没有带索引的方法,也不能使用普通的for循环遍历
java.util.HashSet<E>集合 implement Set接口
特点:
-
不允许存储重复的元素
-
没有索引,没有带索引的方法,也不能使用普通的for循环遍历
-
是一个无序的集合,存储元素和取出元素的顺序有可能不一致
-
底层是一个哈希表结构(查询的速度非常快)
哈希值
是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得到的地址,不是数据实际存储的物理地址)
在Object类有一个方法,可以获取对象的哈希值
public int hashCode():返回该对象的哈希码值。
hashCode方法源码:
public native int hashCode();
native:代表该方法调用的是本地操作系统的方法
哈希表
set集合存储元素不重复的原理
HashSet存储自定义类型元素
set集合保证元素唯一:
存储的元素(String,Integer,...Student,Person...),必须重写hashCode方法和equals方法
LinkedHashSet集合
java.util.LinkedHashSet集合 extends HashSet集合
特点:
底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序
可变参数
是JDK1.5之后出现的新特性
使用前提:
当方法的参数列表的数据类型已经确定,但是参数的个数不确定,就可以使用可变参数
使用格式:定义方法时使用
修饰符 返回值类型 方法名(数据类型...变量名){}
原理:
可变参数的底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数
传递的参数个数,可以是0个(不传递),1,2...多个
注意事项:
-
一个方法的参数列表,只能有一个可变参数
-
如果方法的参数有多个,那么可变参数必须写在参数列表的末尾
特殊(终极)写法:
public static void method(Object...obj){ }