个性化阅读
专注于IT技术分析

Java中的集合

本文概述

Java中的Collection是提供用于存储和操作对象组的体系结构的框架。

Java Collections可以完成你对数据执行的所有操作, 例如搜索, 排序, 插入, 操作和删除。

Java Collection表示单个对象单元。 Java Collection框架提供了许多接口(Set, List, Queue, Deque)和类(ArrayList, Vector, LinkedList, PriorityQueue, HashSet, LinkedHashSet, TreeSet)。

Java中的集合是什么

集合表示对象的单个单位, 即一组。

Java中的框架是什么

  • 它提供了现成的架构。
  • 它代表一组类和接口。
  • 它是可选的。

什么是收藏框架

Collection框架代表用于存储和处理一组对象的统一体系结构。它具有:

  1. 接口及其实现, 即类
  2. 算法

你知道吗?

收集框架层次结构

让我们看看Collection框架的层次结构。 java.util包包含Collection框架的所有类和接口。

Java 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中学习什么

赞(0)
未经允许不得转载:srcmini » Java中的集合

评论 抢沙发

评论前必须登录!