Java中的集合

本文概述

  • 可迭代的接口
  • 采集接口
  • 列表界面
  • 数组列表
  • 链表
  • 向量
  • 队列接口
  • PriorityQueue
  • 和接口
  • ArrayDeque
  • 设置界面
  • 哈希集
  • 链接哈希集
  • SortedSet接口
  • 树集
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接口中声明了许多方法。它们如下:
没有。 方法 描述
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中的集合】我们将在Java Collections Framework中学习什么

    推荐阅读