Java - Collection 接口及主要实现类

Java - Collection 接口及主要实现类

Collection 接口及主要实现类

一、Collection1. 基本介绍2. 常用方法

二、List1. 基本介绍2. List 的特有方法3. List 接口的实现类

三、Set 接口1. 基本介绍2. Set 接口的实现类

一、Collection

1. 基本介绍

Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.List 与 java.util.Set。其中:

List 的特点是有索引、存取有序、可重复。Set 的特点是无索引、存取无序(LinkedHashSet除外)、不可重复。

而两个子接口又分别有各自对应的实现类。其中,List 接口的主要实现类包括 java.util.ArrayList 和 java.util.LinkedList;Set 接口的主要实现类有 java.util.HashSet、java.util.LinkedHashSet 和 java.util.TreeSet。可以通过一张图来描述 Collection 接口的继承实现体系。

2. 常用方法

public boolean add(E e):把给定的对象添加到当前集合中 。public void clear():清空集合中所有的元素。public boolean remove(E e):把给定的对象在当前集合中删除。public boolean contains(E e):判断当前集合中是否包含给定的对象。public boolean isEmpty():判断当前集合是否为空。public int size():返回集合中元素的个数。public Object[] toArray():把集合中的元素,存储到数组中。

public class DemoCollection {

public static void main(String[] args) {

// 创建集合对象

Collection coll = new ArrayList(); // 使用多态形式

// 使用方法

// 添加功能 boolean add(String s)

coll.add("小李广");

coll.add("扫地僧");

coll.add("石破天");

System.out.println(coll);

// boolean contains(E e) 判断o是否在集合中存在

System.out.println("判断 扫地僧 是否在集合中"+coll.contains("扫地僧"));

//boolean remove(E e) 删除在集合中的o元素

System.out.println("删除石破天:"+coll.remove("石破天"));

System.out.println("操作之后集合中元素:"+coll);

// size() 集合中有几个元素

System.out.println("集合中有"+coll.size()+"个元素");

// Object[] toArray()转换成一个Object数组

Object[] objects = coll.toArray();

// 遍历数组

for (int i = 0; i < objects.length; i++) {

System.out.println(objects[i]);

}

// void clear() 清空集合

coll.clear();

System.out.println("集合中内容为:"+coll);

// boolean isEmpty() 判断是否为空

System.out.println(coll.isEmpty());

}

}

二、List

1. 基本介绍

java.util.List 接口继承自 Collection 接口,习惯性地会将实现了 List 接口的对象称为 List 集合。这类集合具有以下特点:

List集合中的元素是以线性方式进行存储的,基于不同的实现类有不同的表现形式(数组/链表)List集合中的元素是带索引的,可以通过索引来访问集合中的指定元素List集合中的元素是有序的,即元素的存入顺序和取出顺序一致。List 集合中的元素是可重复的,允许出现重复的元素,可以通过元素的 equals() 方法比较两个元素是否重复

2. List 的特有方法

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):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

public class ListDemo {

public static void main(String[] args) {

// 创建List集合对象

List list = new ArrayList();

// 往 尾部添加 指定元素

list.add("图图");

list.add("小美");

list.add("不高兴");

System.out.println(list);

// add(int index,String s) 往指定位置添加

list.add(1,"没头脑");

System.out.println(list);

// String remove(int index) 删除指定位置元素 返回被删除元素

// 删除索引位置为2的元素

System.out.println("删除索引位置为2的元素");

System.out.println(list.remove(2));

System.out.println(list);

// String set(int index,String s)

// 在指定位置 进行 元素替代(改)

// 修改指定位置元素

list.set(0, "三毛");

System.out.println(list);

// String get(int index) 获取指定位置元素

// 跟size() 方法一起用 来 遍历的

for(int i = 0;i

System.out.println(list.get(i));

}

//还可以使用增强for

for (String string : list) {

System.out.println(string);

}

}

}

3. List 接口的实现类

java.util.ArrayList 底层采用数组实现,查询快,增删慢 java.util.LinkedList 底层采用双向链表实现,查询慢,增删快

其中,由于 LinkedList 自身的结构特性,JDK提供了大量有关首尾操作的方法:

public void addFirst(E e):将指定元素插入此列表的开头。public void addLast(E e):将指定元素添加到此列表的结尾。public E getFirst():返回此列表的第一个元素。public E getLast():返回此列表的最后一个元素。public E removeFirst():移除并返回此列表的第一个元素。public E removeLast():移除并返回此列表的最后一个元素。public E pop():从此列表所表示的堆栈处弹出一个元素。public void push(E e):将元素推入此列表所表示的堆栈。public boolean isEmpty():如果列表不包含元素,则返回true。

public class LinkedListDemo {

public static void main(String[] args) {

LinkedList link = new LinkedList();

//添加元素

link.addFirst("abc1");

link.addFirst("abc2");

link.addFirst("abc3");

System.out.println(link);

// 获取元素

System.out.println(link.getFirst());

System.out.println(link.getLast());

// 删除元素

System.out.println(link.removeFirst());

System.out.println(link.removeLast());

while (!link.isEmpty()) { //判断集合是否为空

System.out.println(link.pop()); //弹出集合中的栈顶元素

}

System.out.println(link);

}

}

三、Set 接口

1. 基本介绍

java.util.Set 接口同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,但是比 Collection 接口更加严格。Set 接口的实现类对象具有以下特点:

Set 接口实现类中的元素是无索引的,无法通过索引来访问集合中的指定元素除 LinkedHashSet 以外,Set 接口实现类中的元素是无序的,元素的存入顺序和取出顺序不能保证一致Set 接口实现类中的元素是不可重复的,不允许出现重复的元素,在添加元素的过程中,Set类对象会通过某些规则保证存入的元素不出现重复

2. Set 接口的实现类

java.util.HashSet 底层采用散列表实现,无索引、不可以存储重复元素、存取无序。当出现哈希冲突时,相同哈希值的元素采用链表结构存储,当同一哈希值的冲突元素超过 8 个时,改为红黑树存储。

public class HashSetDemo {

public static void main(String[] args) {

//创建 Set集合

HashSet set = new HashSet();

//添加元素

set.add(new String("cba"));

set.add("abc");

set.add("bac");

set.add("cba");

//遍历

for (String name : set) {

System.out.println(name);

}

}

}

java.util.LinkedHashSet 底层采用散列表实现,同样使用链表+红黑树的搭配解决哈希冲突的问题。且无索引、不可以存储重复元素、存取有序。数据结构与存储机制与 HashSet 一致,但是多了一个维护数据存储顺序的链表。

public class LinkedHashSetDemo {

public static void main(String[] args) {

Set set = new LinkedHashSet();

set.add("bbb");

set.add("aaa");

set.add("abc");

set.add("bbc");

Iterator it = set.iterator();

while (it.hasNext()) {

System.out.println(it.next());

}

}

}

运行结果:

bbb

aaa

abc

bbc

注意:Set接口实现类中的元素能够保证唯一性,实际上是根据对象的 hashCode() 和 equals() 方法来决定的。如果向 Set 类集合中存放自定义的对象,保证其唯一性的方式是复写 hashCode() 和 equals() 方法建立属于当前对象的比较方式。

相关数据

qq怎么改手机在线
beat365网页版登录官网

qq怎么改手机在线

📅 07-30 👁️ 5187
为什么言峰绮礼要命令Lancer自杀?
beat365网页版登录官网

为什么言峰绮礼要命令Lancer自杀?

📅 09-20 👁️ 7655
时间规划,一分钟可以做多少事情?
365娱乐游戏是什么

时间规划,一分钟可以做多少事情?

📅 09-11 👁️ 1340