Java集合详解

Java集合详解

目录

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框架代表了一个用于存储和操作一组对象的统一架构。它有:

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

你知道吗?
  • 迭代集合元素的两种方法是什么?
  • 集合框架中的ArrayList和LinkedList类有什么区别?
  • CollectionList和Vector类在集合框架中有什么区别?
  • 集合框架中的HashSet和HashMap类有什么区别?
  • HashMap和Hashtable类有什么区别?
  • 集合框架中的Iterator和Enumeration接口有什么区别?
  • 我们如何对对象的元素进行排序?Comparable和Comparator接口有什么区别?
  • hashcode()方法是什么?
  • Java集合和Java集合之间有什么区别?

集合框架的层次结构

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

Java Collection框架的层次结构

收集方法界面

Collection接口中声明了许多方法。它们如下:

没有。方法描述
1public boolean add(Object element)用于在此集合中插入元素。
2public boolean addAll(Collection c)用于在调用集合中插入指定的集合元素。
3public boolean remove(Object element)用于从此集合中删除元素。
4public boolean removeAll(Collection c)用于从调用集合中删除指定集合的​​所有元素。
public boolean retainAll(Collection c)用于删除除指定集合之外的调用集合的所有元素。
6public int size()返回集合中元素的总数。
7public void clear()删除总数。集合中的元素。
8public boolean contains(Object element)用于搜索元素。
9public boolean containsAll(Collection c)用于搜索此集合中的指定集合。
10public Iterator iterator()返回一个迭代器。
11public Object [] toArray()将集合转换为数组。
12public boolean isEmpty()检查集合是否为空。
13public boolean equals(Object element)匹配两个集合。
14public int hashCode()返回集合的哈希码。

迭代器接口

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

迭代器接口的方法

Iterator接口中只有三种方法。他们是:

没有。方法描述
1public boolean hasNext()如果迭代器有更多元素,则返回true,否则返回false。
2public Object next()它返回元素并将光标指针移动到下一个元素。
3public void remove()它删除了迭代器返回的最后一个元素。它使用较少。

可重复接口

Iterable接口是所有集合类的根接口。Collection接口扩展了Iterable接口,因此Collection接口的所有子类也实现了Iterable接口。

它只包含一个抽象方法。即

  1. 迭代器<T>迭代器()  

它返回类型为T的元素的迭代器。


集合界面

Collection接口是由集合框架中的所有类实现的接口。它声明了每个集合都有的方法。换句话说,我们可以说Collection接口构建了集合框架所依赖的基础。

Collection接口的一些方法是Boolean add(Object obj),Boolean addAll(Collection c),void clear()等,它们由Collection接口的所有子类实现。


列表界面

List接口是Collection接口的子接口。它禁止列表类型数据结构,我们可以在其中存储有序的对象集合。它可以具有重复值。

List接口由ArrayList,LinkedList,Vector和Stack类实现。

要实例化List接口,我们必须使用:

  1. List <data-type> list1 =  new  ArrayList();  
  2. List <data-type> list2 =  new  LinkedList();  
  3. List <data-type> list3 =  new  Vector();  
  4. List <data-type> list4 =  new  Stack();  

List接口中有多种方法可用于插入,删除和访问列表中的元素。

下面给出了实现List接口的类。


数组列表

ArrayList类实现List接口。它使用动态数组来存储不同数据类型的重复元素。ArrayList类维护插入顺序并且是非同步的。存储在ArrayList类中的元素可以随机访问。请考虑以下示例。

  1. import  java.util。*;  
  2. class  TestJavaCollection1 {  
  3. public static void  main(String args []){    
  4. ArrayList <String> list = new  ArrayList <String>(); //创建arraylist  
  5. list.add(“Ravi” ); //在arraylist中添加对象  
  6. list.add(“Vijay” );  
  7. list.add(“Ravi” );  
  8. list.add(“Ajay” );  
  9. //通过迭代器遍历列表  
  10. Iterator itr = list.iterator();  
  11. while (itr.hasNext()){  
  12. 的System.out.println(itr.next());  
  13. }  
  14. }  
  15. }  

输出:

拉维
维杰
拉维
阿贾伊

链表

LinkedList实现Collection接口。它在内部使用双向链表来存储元素。它可以存储重复的元素。它维护插入顺序并且不同步。在LinkedList中,操作很快,因为不需要移位。

请考虑以下示例。

  1. import  java.util。*;  
  2. 公共 TestJavaCollection2 {   
  3. public static void  main(String args []){    
  4. LinkedList <String> al = new  LinkedList <String>();  
  5. al.add(“拉维” );  
  6. al.add(“Vijay” );  
  7. al.add(“拉维” );  
  8. al.add(“Ajay” );  
  9. Iterator <String> itr = al.iterator();  
  10. while (itr.hasNext()){  
  11. 的System.out.println(itr.next());  
  12. }  
  13. }  
  14. }  

输出:

拉维
维杰
拉维
阿贾伊

向量

Vector使用动态数组来存储数据元素。它类似于ArrayList。但是,它是同步的并且包含许多不属于Collection框架的方法。

请考虑以下示例。

  1. import  java.util。*;  
  2. 公共 TestJavaCollection3 {   
  3. public static void  main(String args []){    
  4. Vector <String> v = new  Vector <String>();  
  5. v.add(“Ayush” );  
  6. v.add(“Amit” );  
  7. v.add(“Ashish” );  
  8. v.add(“Garima” );  
  9. Iterator <String> itr = v.iterator();  
  10. while (itr.hasNext()){  
  11. 的System.out.println(itr.next());  
  12. }  
  13. }  
  14. }  

输出:

AYUSH
阿米特
阿希什
Garima

堆栈是Vector的子类。它实现了后进先出数据结构,即Stack。该堆栈包含Vector类的所有方法,并且还提供了自己的方法,如boolean push(),boolean peek(),boolean push(object o),它定义了它的属性。

请考虑以下示例。

  1. import  java.util。*;  
  2. 公共 TestJavaCollection4 {   
  3. public static void  main(String args []){    
  4. Stack <String> stack =  new  Stack <String>();  
  5. stack.push(“Ayush” );  
  6. stack.push(“Garvit” );  
  7. stack.push(“Amit” );  
  8. stack.push(“Ashish” );  
  9. stack.push(“Garima” );  
  10. stack.pop();  
  11. Iterator <String> itr = stack.iterator();  
  12. while (itr.hasNext()){  
  13. 的System.out.println(itr.next());  
  14. }  
  15. }  
  16. }  

输出:

AYUSH
Garvit
阿米特
阿希什

队列接口

队列界面维护先进先出顺序。它可以定义为一个有序列表,用于保存即将处理的元素。有许多类,如PriorityQueue,Deque,ArrayDeque等,它们实现了Queue接口。

队列接口可以实例化为:

  1. 队列<String> q1 =  new  PriorityQueue();  
  2. 队列<String> q2 =  new  ArrayDeque();  

有各种类实现Queue接口,其中一些在下面给出。


的PriorityQueue

PriorityQueue类实现Queue接口。它包含要按其优先级处理的元素或对象。PriorityQueue不允许将空值存储在队列中。

请考虑以下示例。

  1. import  java.util。*;  
  2. 公共 TestJavaCollection5 {   
  3. public static void  main(String args []){    
  4. PriorityQueue <String> queue = new  PriorityQueue <String>();  
  5. queue.add(“Amit Sharma” );  
  6. queue.add(“Vijay Raj” );  
  7. queue.add(“JaiShankar” );  
  8. queue.add(“Raj” );  
  9. System.out.println(“head:” + queue.element());  
  10. System.out.println(“head:” + queue.peek());  
  11. System.out.println(“迭代队列元素:” );  
  12. Iterator itr = queue.iterator();  
  13. while (itr.hasNext()){  
  14. 的System.out.println(itr.next());  
  15. }  
  16. queue.remove();  
  17. queue.poll();  
  18. System.out.println(“删除两个元素后:” );  
  19. Iterator <String> itr2 = queue.iterator();  
  20. while (itr2.hasNext()){  
  21. 的System.out.println(itr2.next());  
  22. }  
  23. }  
  24. }  

输出:

负责人:Amit Sharma
负责人:Amit Sharma
迭代队列元素:
阿米特夏尔马
拉吉
苏杰生
维杰拉杰
删除两个元素后:
拉吉
维杰拉杰

Deque接口

Deque接口扩展了Queue接口。在Deque中,我们可以从侧面移除和添加元素。Deque代表一个双端队列,它使我们能够在两端执行操作。

Deque可以实例化为:

  1. Deque d =  new  ArrayDeque();  

ArrayDeque

ArrayDeque类实现Deque接口。它方便我们使用Deque。与队列不同,我们可以从两端添加或删除元素。

ArrayDeque比ArrayList和Stack更快,没有容量限制。

请考虑以下示例。

  1. import  java.util。*;  
  2. 公共 TestJavaCollection6 {   
  3. public static void  main(String [] args){    
  4. //创建Deque并添加元素  
  5. Deque <String> deque =  new  ArrayDeque <String>();  
  6. deque.add(“Gautam” );  
  7. deque.add(“Karan” );  
  8. deque.add(“Ajay” );  
  9. //遍历元素  
  10. for  (String str:deque){  
  11. 的System.out.println(STR);  
  12. }  
  13. }  
  14. }  

输出:

高塔姆
卡兰
阿贾伊

Set Interface

Java中的Set Interface存在于java.util包中。它扩展了Collection接口。它表示无序的元素集,不允许我们存储重复的项。我们可以在Set中存储最多一个空值。Set由HashSet,LinkedHashSet和TreeSet实现。

Set可以实例化为:

  1. 设置<data-type> s1 =  new  HashSet <data-type>();  
  2. 设置<data-type> s2 =  new  LinkedHashSet <data-type>();  
  3. 设置<data-type> s3 =  new  TreeSet <data-type>();  

HashSet

HashSet类实现了Set Interface。它表示使用哈希表进行存储的集合。散列用于在HashSet中存储元素。它包含独特的项目。

请考虑以下示例。

  1. import  java.util。*;  
  2. 公共 TestJavaCollection7 {   
  3. public static void  main(String args []){    
  4. //创建HashSet并添加元素  
  5. HashSet <String> set = new  HashSet <String>();  
  6. set.add(“Ravi” );  
  7. set.add(“Vijay” );  
  8. set.add(“Ravi” );  
  9. set.add(“Ajay” );  
  10. //遍历元素  
  11. Iterator <String> itr = set.iterator();  
  12. while (itr.hasNext()){  
  13. 的System.out.println(itr.next());  
  14. }  
  15. }  
  16. }  

输出:

维杰
拉维
阿贾伊

LinkedHashSet

LinkedHashSet类表示Set Interface的LinkedList实现。它扩展了HashSet类并实现了Set接口。与HashSet一样,它也包含独特的元素。它维护插入顺序并允许null元素。

请考虑以下示例。

  1. import  java.util。*;  
  2. 公共 TestJavaCollection8 {   
  3. public static void  main(String args []){    
  4. LinkedHashSet <String> set = new  LinkedHashSet <String>();  
  5. set.add(“Ravi” );  
  6. set.add(“Vijay” );  
  7. set.add(“Ravi” );  
  8. set.add(“Ajay” );  
  9. Iterator <String> itr = set.iterator();  
  10. while (itr.hasNext()){  
  11. 的System.out.println(itr.next());  
  12. }  
  13. }  
  14. }  

输出:

拉维
维杰
阿贾伊

SortedSet接口

SortedSet是Set接口的替代,它为其元素提供总排序。SortedSet的元素按递增(递增)顺序排列。SortedSet提供了抑制元素自然排序的其他方法。

SortedSet可以实例化为:

  1. SortedSet <data-type> set =  new  TreeSet();  

TreeSet中

Java TreeSet类实现使用树进行存储的Set接口。与HashSet一样,TreeSet也包含唯一元素但是,TreeSet的访问和检索时间非常快。TreeSet中的元素以升序存储。

请考虑以下示例:

  1. import  java.util。*;  
  2. 公共 TestJavaCollection9 {   
  3. public static void  main(String args []){    
  4. //创建和添加元素  
  5. TreeSet <String> set = new  TreeSet <String>();  
  6. set.add(“Ravi” );  
  7. set.add(“Vijay” );  
  8. set.add(“Ravi” );  
  9. set.add(“Ajay” );  
  10. //遍历元素  
  11. Iterator <String> itr = set.iterator();  
  12. while (itr.hasNext()){  
  13. 的System.out.println(itr.next());  
  14. }  
  15. }  
  16. }  

输出:

阿贾伊
拉维
维杰

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值