Java教程

Java 集合

Java中的Collection是一个框架,提供了用于存储和操作对象组的体系结构。
Java Collections可以完成您对数据执行的所有操作,例如搜索,排序,插入,操作和删除。
Java Collection表示单个对象单元。Java Collection框架提供了许多接口(Set,List,Queue,Deque)和类(ArrayList,Vector,LinkedList,PriorityQueue,HashSet,LinkedHashSet,TreeSet)。

Java中的集合是什么

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

Java中的框架是什么

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

什么是Collection框架

Collection框架表示用于存储和处理一组对象的统一体系结构。它具有:
接口及其实现,即类 算法

集合框架层次结构

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

集合方法

在Collection接口中声明了许多方法。它们如下:
Method Description
public boolean add(E e) 用于在此集合中插入元素。
public boolean addAll(Collection<? extends E> c) 它用于在调用集合中插入指定的集合元素。
public boolean remove(Object element) 它用于从集合中删除元素。
public boolean removeAll(Collection<?> c) 它用于从调用集合中删除指定集合的​​所有元素。
default boolean removeIf(Predicate<? super E> filter) 它用于删除集合中所有满足指定谓词的元素。
public boolean retainAll(Collection<?> c) 它用于删除调用集合中除指定集合之外的所有元素。
public int size() 它返回集合中元素的总数。
public void clear() 它从集合中删除元素总数。
public boolean contains(Object element) 用于搜索元素。
public boolean containsAll(Collection<?> c) 用于搜索集合中的指定集合。
public Iterator iterator() 它返回一个迭代器。
public Object[] toArray() 它将集合转换为数组。
public <T> T[] toArray(T[] a) 它将集合转换为数组。在这里,返回数组的运行时类型是指定数组的运行时类型。
public boolean isEmpty() 它检查集合是否为空。
default Stream<E> parallelStream() 它返回一个可能并行的Stream,并将其集合作为源。
default Stream<E> stream() 它返回一个以集合为源的顺序Stream。
default Spliterator<E> spliterator() 它在集合中的指定元素上生成拆分器。
public boolean equals(Object element) 它匹配两个集合。
public int hashCode() 它返回集合的哈希码编号。

迭代器接口

迭代器接口仅提供了向前迭代元素的功能。

迭代器接口的方法

Iterator接口中只有三种方法。他们是:
Method Description
public boolean hasNext() 如果迭代器具有更多元素,则返回true,否则返回false。
public Object next() 它返回元素并将光标指针移动到下一个元素。
public void remove() 它将删除迭代器返回的最后一个元素。它使用较少。

可迭代接口

可迭代接口是所有集合类的根接口。 Collection接口扩展了Iterable接口,因此Collection接口的所有子类也都实现了Iterable接口。
它仅包含一个抽象方法。即
Iterator<T> iterator()
它返回类型T的元素上的迭代器。

Collection接口

Collection接口是由收集框架中的所有类实现的接口。它声明每个集合将具有的方法。换句话说,我们可以说Collection接口建立了Collection框架所依赖的基础。
Collection接口的一些方法包括Boolean add(Object 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

ArrayList类实现List接口。它使用动态数组来存储不同数据类型的重复元素。 ArrayList类保持插入顺序,并且是不同步的。可以随机访问ArrayList类中存储的元素。请考虑以下示例。
import java.util.*;
class TestJavaCollection1{
    public static void main(String args[]){
        ArrayList<String> list=new ArrayList<String>();
        arraylistlist.add("Ravi");
        arraylistlist.add("Vijay");
        list.add("Ravi");
        list.add("Ajay");
        Iterator itr=list.iterator();
        while(itr.hasNext()){
            System.out.println(itr.next());
        }
    }
}
输出:
Ravi
Vijay
Ravi
Ajay

LinkedList

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

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

队列接口

队列接口保持先进先出的顺序。可以将其定义为用于保存将要处理的元素的有序列表。有很多类可以实现Queue接口,例如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接口

Deque接口扩展了Queue接口。在Deque中,我们可以从两侧移除和添加元素。 Deque代表双端队列,使我们能够在两端执行操作。
Deque可以实例化为:
Deque d = new ArrayDeque();

ArrayDeque

ArrayDeque类实现了Deque接口。它有助于我们使用双端队列。与队列不同,我们可以从两端添加或删除元素。
ArrayDeque比ArrayList和Stack更快,并且没有容量限制。
请考虑以下示例。
import java.util.*;
public class TestJavaCollection6{
    public static void main(String[] args) {
        Deque<String> deque = new ArrayDeque<String>();
        deque.add("Gautam");
        deque.add("Karan");
        deque.add("Ajay");
        for (String str : deque) {
            System.out.println(str);
        }
    }
}
输出:
Gautam
Karan
Ajay

设置接口

Java中的设置接口位于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

HashSet类实现Set接口。它表示使用哈希表进行存储的集合。散列用于将元素存储在HashSet中。它包含唯一项。
请考虑以下示例。
import java.util.*;
public class TestJavaCollection7{
    public static void main(String args[]){
        HashSet<String> set=new HashSet<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());
        }
    }
}
输出:
Vijay
Ravi
Ajay

LinkedHashSet

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();

TreeSet

Java TreeSet类实现了Set接口,该接口使用树进行存储。与HashSet一样,TreeSet也包含唯一元素。但是,TreeSet的访问和检索时间非常快。 TreeSet中的元素以升序存储。
请考虑以下示例:
import java.util.*;
public class TestJavaCollection9{
    public static void main(String args[]){
        TreeSet<String>set=new TreeSet<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());
        }
    }
}
输出:
Ajay
Ravi
Vijay

相关主题

Java ArrayList Java LinkedList ArrayList和LinkedList之间的差异 Java List Java HashSet Java LinkedHashSet Java TreeSet Java 队列接口 Java Deque接口 Java Map接口 Java HashMap Java中HashMap工作原理 Java LinkedHashMap Java TreeMap Java HashTable HashMap和Hashtable之间的区别 Java EnumSet Java EnumMap Java Collections Java 集合排序 Java Comparable接口 Java Comparator接口 Comparable与Comparator之间的区别 Java Properties ArrayList与Vector之间的差异 Java Vector Java 堆栈
我们将在Java Collections Framework中学习什么 ArrayList操作 LinkedList操作 List接口 HashSet操作 LinkedHashSet操作 TreeSet操作 PriorityQueue操作 Map接口 HashMap操作 LinkedHashMap操作 TreeMap操作 HashMap接口 集合排序 集合比较接口 集合比较器接口
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4