Collection集合
Collection是单列集合的顶层接口,其实现的子类有List集合和Set集合。
-
List集合:有序,可重复
-
Set集合:无序,不可重复
-
由于Collection是一个接口,所以当要实现一个Collection对象时,只能通过实例化其子类对象的方式来创建。
-
实现方式:Collection list = new ArrayList<>();
方法 | 描述 |
---|---|
public boolean add(E e) | 添加元素 |
public boolean remove(Object o) | 从该集合中删除指定元素的单个实例 |
public void clear() | 清空集合对象 |
public boolean isEmpty() | 判断集合是否为空 |
public boolean contains(Object o) | 判断集合中是否包含指定的元素 |
public int size() | 返回集合中元素个数 |
public Iterator<E> iterator() | 获取集合对象对应的迭代器 |
List集合
- 有序集合(也称为序列 )。该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。
- List接口提供了一个特殊的迭代器,称为ListIterator,其允许元件插入和更换,并且除了该Iterator接口提供正常操作的双向访问。 提供了一种方法来获取从列表中的指定位置开始的列表迭代器。
*实现方式:List list = new ArrayList<>();
方法 | 描述 |
---|---|
public void add(int index, E element) | 指定位置添加数据 |
public E remove(int index) | 删除指定位置的元素,返会删除的元素 |
public E set(int index, E element) | 在指定位置插入元素,返会插入的元素 |
public E get(int index) | 获取指定位置的元素 |
- 列表迭代器ListIterator要想使用列表迭代器的hasProvious方法必须先进行正向遍历。
方法 | 描述 |
---|---|
public ListIterator listIterator() | 根据List对象获取对应的ListInterator列表迭代器 |
public boolean hasProvious() | 判断列表迭代器中是否有上一个元素 |
public boolean Provious() | 获取列表迭代器中的上一个元素 |
ArrayList集合
底层数据结构是数组,查询和修改快,增删慢。
代码实现:ArrayList简单遍历
ArrayList<String> list = new ArrayList<>();
list.add("hello");
list.add("world");
list.add("java");
//普通迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
System.out.println("-----------------------");
//列表迭代器
ListIterator<String> lit = list.listIterator();
while (lit.hasNext()){
System.out.println(lit.next());
}
System.out.println("-----------------------");
//for循环方式一:
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("-----------------------");
//for循环方式二:
for (String s : list) {
System.out.println(s);
}
运行结果:
hello
world
java
-----------------------
hello
world
java
-----------------------
hello
world
java
-----------------------
hello
world
java
LinkedList集合
·底层数据结构是链表,查询和修改慢,增删快。
·LinkedList集合主要是用来操作头和尾元素的
方法 | 描述 |
---|---|
public void addFirst(E e) | 往列表的开头插入指定的元素 |
public void addLast(E e) | 往列表的末尾插入指定的元素 |
public E removeFirst() | 删除列表中的第一个元素, 并返回被删除的元素 |
public E removeLast() | 删除列表中的最后一个元素, 并返回被删除的元素 |
public E getFirst() | 返回列表的第一个元素 |
public E getLast() | 返回列表的最后一个元素 |
代码实现:LinkedList常用方法
LinkedList<String> list = new LinkedList<>();
list.add("hello");
list.addFirst("head");
list.addLast("foot");
System.out.println("list = " + list);
System.out.println(list.set(0, "头"));
System.out.println(list.set(2, "尾"));
System.out.println("list = " + list);
System.out.println(list.get(1));
运行结果
list = [head, hello, foot]
head
foot
list = [头, hello, 尾]
hello
Set集合
Collection集合的子体系,Set元素集合特点是无序且唯一
- Set集合是一个接口,无法直接实例化,可以通过其实例化子类来创建;
- Set集合没有索引,不可以使用普通for循环遍历;
- Set集合常用的子类:HashSet和TreeSet。
HashSet集合
- 底层数据结构是哈希表;
- 不保证元素的存取顺序;
- 不可以使用普通for循环遍历
- 不包含重复元素
哈希值
指的是JDK根据对象的地址,或者字符串,或者数字算出来的int类型的数值。
方法 | 描述 |
---|---|
public int hashCode() | 根据对象,获取对应的哈希值 |
LinkedHashSet集合
HashSet的子类
- 哈希表和链表实现的Set接口,具有可预测的迭代次序;
- 由链表保证次序,存取顺序一致;
- 由哈希表保证元素唯一。
- 没有索引,不可使用普通for循环遍历
TreeSet集合
- TreeSet集合存储的数据可以排序,排序方式根据比较器定义;
- 没有索引,不能使用普通for循环遍历;
- 不包含同一元素。