本文概述
Java中的Collection是提供用于存储和操作对象组的体系结构的框架。
Java Collections可以完成你对数据执行的所有操作, 例如搜索, 排序, 插入, 操作和删除。
Java Collection表示单个对象单元。 Java Collection框架提供了许多接口(Set, List, Queue, Deque)和类(ArrayList, Vector, LinkedList, PriorityQueue, HashSet, LinkedHashSet, TreeSet)。
Java中的集合是什么
集合表示对象的单个单位, 即一组。
Java中的框架是什么
- 它提供了现成的架构。
- 它代表一组类和接口。
- 它是可选的。
什么是收藏框架
Collection框架代表用于存储和处理一组对象的统一体系结构。它具有:
- 接口及其实现, 即类
- 算法
你知道吗?
收集框架层次结构
让我们看看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() | 它返回集合的哈希码编号。 |
迭代器接口
迭代器接口提供仅在向前方向上迭代元素的功能。 |
迭代器接口的方法
Iterator接口中只有三种方法。他们是:
没有。 | 方法 | 描述 |
---|---|---|
1 | public boolean hasNext() | 如果迭代器具有更多元素, 则返回true, 否则返回false。 |
2 | public Object next() | 它返回该元素, 并将光标指针移动到下一个元素。 |
3 | public void remove() | 它删除了迭代器返回的最后一个元素。它使用较少。 |
可迭代的接口
Iterable接口是所有集合类的根接口。 Collection接口扩展了Iterable接口, 因此Collection接口的所有子类也实现了Iterable接口。
它仅包含一种抽象方法。即
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 Collections Framework中学习什么
评论前必须登录!
注册