本文概述
- 可迭代的接口
- 采集接口
- 列表界面
- 数组列表
- 链表
- 向量
- 堆
- 队列接口
- PriorityQueue
- 和接口
- ArrayDeque
- 设置界面
- 哈希集
- 链接哈希集
- SortedSet接口
- 树集
Java Collections可以完成你对数据执行的所有操作, 例如搜索, 排序, 插入, 操作和删除。
Java Collection表示单个对象单元。 Java Collection框架提供了许多接口(Set, List, Queue, Deque)和类(ArrayList, Vector, LinkedList, PriorityQueue, HashSet, LinkedHashSet, TreeSet)。
Java中的集合是什么 集合表示对象的单个单位, 即一组。
Java中的框架是什么
- 它提供了现成的架构。
- 它代表一组类和接口。
- 它是可选的。
- 接口及其实现, 即类
- 算法
收集框架层次结构
让我们看看Collection框架的层次结构。 java.util包包含Collection框架的所有类和接口。
文章图片
收集方法界面
在Collection接口中声明了许多方法。它们如下:
没有。 | 方法 | 描述 |
---|---|---|
1 | public boolean add(E e) | 用于在此集合中插入元素。 |
2 | 公共布尔addAll(Collection < ?扩展E> c) | 它用于在调用集合中插入指定的集合元素。 |
3 | public boolean remove(Object element) | 它用于从集合中删除元素。 |
4 | 公共布尔removeAll(Collection < ?> c) | 它用于从调用集合中删除指定集合的??所有元素。 |
5 | 默认布尔值removeIf(Predicate < ?super E> 过滤器) | 它用于删除集合中所有满足指定谓词的元素。 |
6 | public boolean keepAll(Collection < ?> c) | 它用于删除调用集合中除指定集合之外的所有元素。 |
7 | public int size() | 它返回集合中元素的总数。 |
8 | public void clear() | 它从集合中删除元素总数。 |
9 | public boolean contains(Object element) | 用于搜索元素。 |
10 | 公共布尔containsAll(Collection < ?> c) | 用于搜索集合中的指定集合。 |
11 | public Iterator iterator() | 它返回一个迭代器。 |
12 | public Object[] toArray() | 它将集合转换为数组。 |
13 | 公共< T> T [] toArray(T [] a) | 它将集合转换为数组。在这里, 返回数组的运行时类型是指定数组的运行时类型。 |
14 | public boolean isEmpty() | 它检查集合是否为空。 |
15 | 默认Stream < E> parallelStream() | 它以集合为源返回可能并行的Stream。 |
16 | 默认Stream < E> stream() | 它返回一个以集合为源的顺序Stream。 |
17 | 默认的Spliterator < E> spliterator() | 它在集合中的指定元素上生成拆分器。 |
18 | public boolean equals(Object element) | 它匹配两个集合。 |
19 | public int hashCode() | 它返回集合的哈希码编号。 |
迭代器接口提供仅在向前方向上迭代元素的功能。 |
没有。 | 方法 | 描述 |
---|---|---|
1 | public boolean hasNext() | 如果迭代器具有更多元素, 则返回true, 否则返回false。 |
2 | public Object next() | 它返回该元素, 并将光标指针移动到下一个元素。 |
3 | public void remove() | 它删除了迭代器返回的最后一个元素。它使用较少。 |
它仅包含一种抽象方法。即
Iterator<
T>
iterator()
它返回类型T的元素上的迭代器。
采集接口 Collection接口是由收集框架中的所有类实现的接口。它声明每个集合将具有的方法。换句话说, 我们可以说Collection接口构建了收集框架所依赖的基础。
Collection接口的一些方法是Boolean add(对象obj), Boolean addAll(Collection c), void clear()等, 它们由Collection接口的所有子类实现。
列表界面 List接口是Collection接口的子接口。它禁止使用列表类型的数据结构, 我们可以在其中存储对象的有序集合。它可以有重复的值。
List接口由ArrayList, LinkedList, Vector和Stack类实现。
要实例化List接口, 我们必须使用:
List <
data-type>
list1= new ArrayList();
List <
data-type>
list2 = new LinkedList();
List <
data-type>
list3 = new Vector();
List <
data-type>
list4 = new Stack();
List界面中有多种方法可用于插入, 删除和访问列表中的元素。
下面给出了实现List接口的类。
数组列表 ArrayList类实现List接口。它使用动态数组来存储不同数据类型的重复元素。 ArrayList类保持插入顺序, 并且是不同步的。可以随机访问ArrayList类中存储的元素。考虑以下示例。
import java.util.*;
class TestJavaCollection1{
public static void main(String args[]){
ArrayList<
String>
list=new ArrayList<
String>
();
//Creating arraylist
list.add("Ravi");
//Adding object in arraylist
list.add("Vijay");
list.add("Ravi");
list.add("Ajay");
//Traversing list through Iterator
Iterator itr=list.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出:
Ravi
Vijay
Ravi
Ajay
链表 LinkedList实现Collection接口。它在内部使用双向链表来存储元素。它可以存储重复的元素。它保持插入顺序, 并且不同步。在LinkedList中, 由于不需要进行移位, 因此操作很快。
考虑以下示例。
import java.util.*;
public class TestJavaCollection2{
public static void main(String args[]){
LinkedList<
String>
al=new LinkedList<
String>
();
al.add("Ravi");
al.add("Vijay");
al.add("Ravi");
al.add("Ajay");
Iterator<
String>
itr=al.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出:
Ravi
Vijay
Ravi
Ajay
向量 Vector使用动态数组来存储数据元素。它类似于ArrayList。但是, 它是同步的, 并且包含不属于Collection框架的许多方法。
考虑以下示例。
import java.util.*;
public class TestJavaCollection3{
public static void main(String args[]){
Vector<
String>
v=new Vector<
String>
();
v.add("Ayush");
v.add("Amit");
v.add("Ashish");
v.add("Garima");
Iterator<
String>
itr=v.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出:
Ayush
Amit
Ashish
Garima
堆 堆栈是Vector的子类。它实现了后进先出的数据结构, 即堆栈。堆栈包含Vector类的所有方法, 还提供定义其属性的方法, 如boolean push(), boolean peek(), boolean push(object o)。
考虑以下示例。
import java.util.*;
public class TestJavaCollection4{
public static void main(String args[]){
Stack<
String>
stack = new Stack<
String>
();
stack.push("Ayush");
stack.push("Garvit");
stack.push("Amit");
stack.push("Ashish");
stack.push("Garima");
stack.pop();
Iterator<
String>
itr=stack.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出:
Ayush
Garvit
Amit
Ashish
队列接口 队列接口保持先进先出顺序。可以将其定义为用于容纳将要处理的元素的有序列表。有许多类(例如PriorityQueue, Deque和ArrayDeque)实现了Queue接口。
队列接口可以实例化为:
Queue<
String>
q1 = new PriorityQueue();
Queue<
String>
q2 = new ArrayDeque();
有许多实现Queue接口的类, 下面给出其中一些。
PriorityQueue PriorityQueue类实现Queue接口。它包含要按其优先级处理的元素或对象。 PriorityQueue不允许将空值存储在队列中。
考虑以下示例。
import java.util.*;
public class TestJavaCollection5{
public static void main(String args[]){
PriorityQueue<
String>
queue=new PriorityQueue<
String>
();
queue.add("Amit Sharma");
queue.add("Vijay Raj");
queue.add("JaiShankar");
queue.add("Raj");
System.out.println("head:"+queue.element());
System.out.println("head:"+queue.peek());
System.out.println("iterating the queue elements:");
Iterator itr=queue.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
queue.remove();
queue.poll();
System.out.println("after removing two elements:");
Iterator<
String>
itr2=queue.iterator();
while(itr2.hasNext()){
System.out.println(itr2.next());
}
}
}
输出:
head:Amit Sharma
head:Amit Sharma
iterating the queue elements:
Amit Sharma
Raj
JaiShankar
Vijay Raj
after removing two elements:
Raj
Vijay Raj
和接口 Deque接口扩展了Queue接口。在Deque中, 我们可以从两侧移除和添加元素。 Deque代表双端队列, 它使我们能够在两端执行操作。
双端队列可以实例化为:
Deque d = new ArrayDeque();
ArrayDeque ArrayDeque类实现Deque接口。它有助于我们使用双端队列。与队列不同, 我们可以从两端添加或删除元素。
ArrayDeque比ArrayList和Stack更快, 并且没有容量限制。
考虑以下示例。
import java.util.*;
public class TestJavaCollection6{
public static void main(String[] args) {
//Creating Deque and adding elements
Deque<
String>
deque = new ArrayDeque<
String>
();
deque.add("Gautam");
deque.add("Karan");
deque.add("Ajay");
//Traversing elements
for (String str : deque) {
System.out.println(str);
}
}
}
输出:
Gautam
Karan
Ajay
设置界面 Java中的Set Interface存在于java.util软件包中。它扩展了Collection接口。它代表无序的元素集, 不允许我们存储重复项。我们最多可以在Set中存储一个空值。 Set由HashSet, LinkedHashSet和TreeSet实现。
Set可以实例化为:
Set<
data-type>
s1 = new HashSet<
data-type>
();
Set<
data-type>
s2 = new LinkedHashSet<
data-type>
();
Set<
data-type>
s3 = new TreeSet<
data-type>
();
哈希集 HashSet类实现Set接口。它表示使用哈希表进行存储的集合。散列用于将元素存储在HashSet中。它包含唯一项。
考虑以下示例。
import java.util.*;
public class TestJavaCollection7{
public static void main(String args[]){
//Creating HashSet and adding elements
HashSet<
String>
set=new HashSet<
String>
();
set.add("Ravi");
set.add("Vijay");
set.add("Ravi");
set.add("Ajay");
//Traversing elements
Iterator<
String>
itr=set.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出:
Vijay
Ravi
Ajay
链接哈希集 LinkedHashSet类表示Set接口的LinkedList实现。它扩展了HashSet类并实现Set接口。像HashSet一样, 它也包含唯一元素。它保持插入顺序并允许空元素。
考虑以下示例。
import java.util.*;
public class TestJavaCollection8{
public static void main(String args[]){
LinkedHashSet<
String>
set=new LinkedHashSet<
String>
();
set.add("Ravi");
set.add("Vijay");
set.add("Ravi");
set.add("Ajay");
Iterator<
String>
itr=set.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出:
Ravi
Vijay
Ajay
SortedSet接口 SortedSet是Set接口的替代方法, 它提供其元素的总体排序。 SortedSet的元素以升序(升序)排列。 SortedSet提供了其他禁止元素自然排序的方法。
SortedSet可以实例化为:
SortedSet<
data-type>
set = new TreeSet();
树集 Java TreeSet类实现了Set接口, 该接口使用树进行存储。与HashSet一样, TreeSet也包含唯一元素。但是, TreeSet的访问和检索时间非常快。 TreeSet中的元素以升序存储。
考虑以下示例:
import java.util.*;
public class TestJavaCollection9{
public static void main(String args[]){
//Creating and adding elements
TreeSet<
String>
set=new TreeSet<
String>
();
set.add("Ravi");
set.add("Vijay");
set.add("Ravi");
set.add("Ajay");
//traversing elements
Iterator<
String>
itr=set.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出:
Ajay
Ravi
Vijay
【Java中的集合】我们将在Java Collections Framework中学习什么
推荐阅读
- Java Comparable接口
- Java WindowListener接口
- Java MouseMotionListener接口
- Java MouseListener接口
- 39个无需注册的最佳免费电子书下载网站推荐合集
- 路由器上的WPS按钮是什么(它是如何工作的?)
- 如何在Mac上截屏(Mac截屏的7种最佳方法)
- Windows 10中启动时的Adob??e GC Invoker Utility是什么(提示和指南)
- 推广定制T恤的8个最有效的想法(提示和技巧)