目录 Java中的集合 集合框架的层次结构 收集方法界面 迭代器接口 可重复接口 集合界面 列表界面 数组列表 链表 向量 堆 队列接口 的PriorityQueue Deque接口 ArrayDeque Set Interface HashSet LinkedHashSet SortedSet接口 TreeSet中
Java中的Collection是一个框架,它提供了一个存储和操作对象组的体系结构。 您可以通过Java Collections实现对搜索,排序,插入,操作,删除等数据执行的所有操作。 Java Collection意味着单个对象单元。Java Collection框架提供了许多接口(Set,List,Queue,Deque等)和类(ArrayList,Vector,LinkedList,PriorityQueue,HashSet,LinkedHashSet,TreeSet等)。 什么是Java中的集合 集合表示单个对象单元,即组。 什么是Java中的框架
- 它提供现成的架构。
- 它代表一组类和接口。
- 这是可选的。
什么是Collection框架 Collection框架代表了一个用于存储和操作一组对象的统一架构。它有:
- 接口及其实现,即类
- 算法
你知道吗?
- 迭代集合元素的两种方法是什么?
- 集合框架中的ArrayList和LinkedList类有什么区别?
- CollectionList和Vector类在集合框架中有什么区别?
- 集合框架中的HashSet和HashMap类有什么区别?
- HashMap和Hashtable类有什么区别?
- 集合框架中的Iterator和Enumeration接口有什么区别?
- 我们如何对对象的元素进行排序?Comparable和Comparator接口有什么区别?
- hashcode()方法是什么?
- Java集合和Java集合之间有什么区别?
集合框架的层次结构 让我们看看Collection框架的层次结构。在java.util中包中包含集合框架所有的类和接口。
收集方法界面 Collection接口中声明了许多方法。它们如下:
没有。 | 方法 | 描述 |
---|
1 | public boolean add(Object element) | 用于在此集合中插入元素。 | 2 | public boolean addAll(Collection c) | 用于在调用集合中插入指定的集合元素。 | 3 | public boolean remove(Object element) | 用于从此集合中删除元素。 | 4 | public boolean removeAll(Collection c) | 用于从调用集合中删除指定集合的所有元素。 | 五 | public boolean retainAll(Collection c) | 用于删除除指定集合之外的调用集合的所有元素。 | 6 | public int size() | 返回集合中元素的总数。 | 7 | public void clear() | 删除总数。集合中的元素。 | 8 | public boolean contains(Object element) | 用于搜索元素。 | 9 | public boolean containsAll(Collection c) | 用于搜索此集合中的指定集合。 | 10 | public Iterator iterator() | 返回一个迭代器。 | 11 | public Object [] toArray() | 将集合转换为数组。 | 12 | public boolean isEmpty() | 检查集合是否为空。 | 13 | public boolean equals(Object element) | 匹配两个集合。 | 14 | public int hashCode() | 返回集合的哈希码。 |
迭代器接口
迭代器接口的方法 Iterator接口中只有三种方法。他们是:
没有。 | 方法 | 描述 |
---|
1 | public boolean hasNext() | 如果迭代器有更多元素,则返回true,否则返回false。 | 2 | public Object next() | 它返回元素并将光标指针移动到下一个元素。 | 3 | public void remove() | 它删除了迭代器返回的最后一个元素。它使用较少。 |
可重复接口 Iterable接口是所有集合类的根接口。Collection接口扩展了Iterable接口,因此Collection接口的所有子类也实现了Iterable接口。 它只包含一个抽象方法。即
- 迭代器<T>迭代器()
它返回类型为T的元素的迭代器。
集合界面 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类实现List接口。它使用动态数组来存储不同数据类型的重复元素。ArrayList类维护插入顺序并且是非同步的。存储在ArrayList类中的元素可以随机访问。请考虑以下示例。
- import java.util。*;
- class TestJavaCollection1 {
- public static void main(String args []){
- ArrayList <String> list = new ArrayList <String>(); //创建arraylist
- list.add(“Ravi” ); //在arraylist中添加对象
- list.add(“Vijay” );
- list.add(“Ravi” );
- list.add(“Ajay” );
- //通过迭代器遍历列表
- Iterator itr = list.iterator();
- while (itr.hasNext()){
- 的System.out.println(itr.next());
- }
- }
- }
输出: 拉维
维杰
拉维
阿贾伊
链表 LinkedList实现Collection接口。它在内部使用双向链表来存储元素。它可以存储重复的元素。它维护插入顺序并且不同步。在LinkedList中,操作很快,因为不需要移位。 请考虑以下示例。
- import java.util。*;
- 公共类 TestJavaCollection2 {
- public static void main(String args []){
- LinkedList <String> al = new LinkedList <String>();
- al.add(“拉维” );
- al.add(“Vijay” );
- al.add(“拉维” );
- al.add(“Ajay” );
- Iterator <String> itr = al.iterator();
- while (itr.hasNext()){
- 的System.out.println(itr.next());
- }
- }
- }
输出: 拉维
维杰
拉维
阿贾伊
向量 Vector使用动态数组来存储数据元素。它类似于ArrayList。但是,它是同步的并且包含许多不属于Collection框架的方法。 请考虑以下示例。
- import java.util。*;
- 公共类 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
阿米特
阿希什
Garima
堆 堆栈是Vector的子类。它实现了后进先出数据结构,即Stack。该堆栈包含Vector类的所有方法,并且还提供了自己的方法,如boolean push(),boolean peek(),boolean push(object o),它定义了它的属性。 请考虑以下示例。
- import java.util。*;
- 公共类 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
阿米特
阿希什
队列接口 队列界面维护先进先出顺序。它可以定义为一个有序列表,用于保存即将处理的元素。有许多类,如PriorityQueue,Deque,ArrayDeque等,它们实现了Queue接口。 队列接口可以实例化为:
- 队列<String> q1 = new PriorityQueue();
- 队列<String> q2 = new ArrayDeque();
有各种类实现Queue接口,其中一些在下面给出。
的PriorityQueue PriorityQueue类实现Queue接口。它包含要按其优先级处理的元素或对象。PriorityQueue不允许将空值存储在队列中。 请考虑以下示例。
- import java.util。*;
- 公共类 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(“迭代队列元素:” );
- Iterator itr = queue.iterator();
- while (itr.hasNext()){
- 的System.out.println(itr.next());
- }
- queue.remove();
- queue.poll();
- System.out.println(“删除两个元素后:” );
- Iterator <String> itr2 = queue.iterator();
- while (itr2.hasNext()){
- 的System.out.println(itr2.next());
- }
- }
- }
输出: 负责人:Amit Sharma
负责人:Amit Sharma
迭代队列元素:
阿米特夏尔马
拉吉
苏杰生
维杰拉杰
删除两个元素后:
拉吉
维杰拉杰
Deque接口 Deque接口扩展了Queue接口。在Deque中,我们可以从侧面移除和添加元素。Deque代表一个双端队列,它使我们能够在两端执行操作。 Deque可以实例化为:
- Deque d = new ArrayDeque();
ArrayDeque ArrayDeque类实现Deque接口。它方便我们使用Deque。与队列不同,我们可以从两端添加或删除元素。 ArrayDeque比ArrayList和Stack更快,没有容量限制。 请考虑以下示例。
- import java.util。*;
- 公共类 TestJavaCollection6 {
- public static void main(String [] args){
- //创建Deque并添加元素
- Deque <String> deque = new ArrayDeque <String>();
- deque.add(“Gautam” );
- deque.add(“Karan” );
- deque.add(“Ajay” );
- //遍历元素
- for (String str:deque){
- 的System.out.println(STR);
- }
- }
- }
输出: 高塔姆
卡兰
阿贾伊
Set Interface Java中的Set Interface存在于java.util包中。它扩展了Collection接口。它表示无序的元素集,不允许我们存储重复的项。我们可以在Set中存储最多一个空值。Set由HashSet,LinkedHashSet和TreeSet实现。 Set可以实例化为:
- 设置<data-type> s1 = new HashSet <data-type>();
- 设置<data-type> s2 = new LinkedHashSet <data-type>();
- 设置<data-type> s3 = new TreeSet <data-type>();
HashSet HashSet类实现了Set Interface。它表示使用哈希表进行存储的集合。散列用于在HashSet中存储元素。它包含独特的项目。 请考虑以下示例。
- import java.util。*;
- 公共类 TestJavaCollection7 {
- public static void main(String args []){
- //创建HashSet并添加元素
- 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());
- }
- }
- }
输出: 维杰
拉维
阿贾伊
LinkedHashSet LinkedHashSet类表示Set Interface的LinkedList实现。它扩展了HashSet类并实现了Set接口。与HashSet一样,它也包含独特的元素。它维护插入顺序并允许null元素。 请考虑以下示例。
- import java.util。*;
- 公共类 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());
- }
- }
- }
输出: 拉维
维杰
阿贾伊
SortedSet接口 SortedSet是Set接口的替代,它为其元素提供总排序。SortedSet的元素按递增(递增)顺序排列。SortedSet提供了抑制元素自然排序的其他方法。 SortedSet可以实例化为:
- SortedSet <data-type> set = new TreeSet();
TreeSet中 Java TreeSet类实现使用树进行存储的Set接口。与HashSet一样,TreeSet也包含唯一元素但是,TreeSet的访问和检索时间非常快。TreeSet中的元素以升序存储。 请考虑以下示例:
- import java.util。*;
- 公共类 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());
- }
- }
- }
输出: 阿贾伊
拉维
维杰 |