集合框架的学习总结List,Set

本文深入探讨Java集合框架中的List、Vector、LinkedList等集合类型的特点、用法及特有方法,包括添加、删除、修改、查找等操作,并通过代码实例展示了如何在实际场景中灵活运用这些集合类型。



List的基类接口是Collection,List集合有三个常见子类ArrayList ,LinkedList, Vector;

ArrayList底层的数据结构式数组结构。特点在于查询速度很快,线程不同步。

Vector底层的数据结构式数组结构。线程时安全的,出现在jdk1.2版本,增删改查速度都很慢,已被ArrayList替代。

LinkedList的底层的数据结构式链表结构。增加,修改,删除元素的速度也是很快的。

List集合特点是:元素时有序的,同时元素是可以重复的,因为该集合体系时有索引。

List集合中的特有方法

void add(int index, Ojbect b) 向指定集合的位置中添加添加元素;

void addAll(int index,Collection c) 向集合中添加集合c

void remove(int index) 删除集合指定位置处的元素

E get(int index) 获取指定位置处的元素

int   indexOf(Object o) 返回集合中第一次出现该元素的索引下标

int  lastIndexOf(Object o) 返回集合中最后一次出现该元素的索引下标,如果集合中没有出现该元素,那么返回-1;

E  set(int index ,Object o) 用指定的元素替换集合指定位置的元素。

ListIterator listIterator() 返回集合中的一个迭代器。

通过上面的方法我们可以发现,List集合中都可以操作索引下标。

[java]  view plain copy
  1. /* 
  2. List接口中特有的方法 
  3.  
  4. add(int index ,Object obj) 
  5. addAll(Collection c) 
  6.  
  7. remove(int index); 
  8. removeAll(Collection c) 
  9.  
  10. set(int index,Object obj) 
  11.  
  12. get(int index); 
  13. subList(int start,int from) 
  14. listIterator(); 
  15.  
  16. */  
  17. import java.util.*;  
  18. class JavaCollection1_2   
  19. {  
  20.     public static void main(String[] args)   
  21.     {  
  22.         //创建list接口下的一个子类ArrayList对象。  
  23.         ArrayList al=new ArrayList();  
  24.         al.add("java_1");  
  25.         al.add("java_2");  
  26.         al.add("java_3");  
  27.         al.add("java_4");  
  28.         sop("原集合:"+al);  
  29.         //1 在指定的位置添加元素  
  30.         al.add(1,"java_5");  
  31.         sop(al);  
  32.         // 2删除指定位置的元素。  
  33.         al.remove(3);  
  34.         sop(al);  
  35.         //3修改指定位置的元素。  
  36.         al.set(0,"java_10");  
  37.         sop(al);  
  38.         //4获取所有的元素  
  39.         //使用List集合的get()方法。使用角标进行遍历。  
  40.         for(int i=0;i<al.size();i++)  
  41.         {  
  42.             sop("al("+i+")="+al.get(i));  
  43.         }  
  44.         //5使用迭代器  
  45.         for(ListIterator lit=al.listIterator();lit.hasNext();)  
  46.         {  
  47.             sop(lit.next());  
  48.         }  
  49.   
  50.     }  
  51.     public static void sop(Object obj)  
  52.     {  
  53.         System.out.println(obj);  
  54.     }  
  55. }  

List集合中Vector的特性用法:

[java]  view plain copy
  1. import java.util.*;  
  2. /* 
  3. ArrayList,LinkedList不支持枚举,统一使用迭代器。 
  4. 枚举就是Vector特有的取出方式。 
  5. 枚举和迭代的方式是类似的。 
  6. 因为枚举的方法名过长,因此被迭代器取代。 
  7. */  
  8. class JavaCollection1_3   
  9. {  
  10.     public static void main(String[] args)   
  11.     {  
  12.         Vector v=new Vector();  
  13.         v.add("java_1");  
  14.         v.add("java_2");  
  15.         v.add("java_3");  
  16.         v.add("java_4");  
  17.         Enumeration e=v.elements();//使用枚举。  
  18.         while(e.hasMoreElements())  
  19.         {  
  20.             sop(e.nextElement());  
  21.         }  
  22.     }  
  23.     public static void sop(Object obj)  
  24.     {  
  25.         System.out.println(obj);  
  26.     }  
  27. }  
List集合中LinkedList的特性用法:

[java]  view plain copy
  1. /* 
  2. LinkedList特有的方法: 
  3. addFirst();向头部添加元素 
  4. addLast();向尾部添加元素 
  5. getFirst();获取LinkedList集合中头部的元素  
  6. getLast();获取LinkedList集合中尾部的元素 
  7. 这里的getFirst()和getLast()方法都是获取元素,但是不删除元素。 
  8. removeFirst(); 
  9. removeLast(); 
  10. 这里的removeFirst和removeLast方法也可以获取元素,但是元素也同时被删除了 
  11.  
  12. 注意事项; 
  13. 使用上面的方法,如果集合中没有元素,那么就会抛出NoSuchElementException异常 
  14. 在jdk1.6的版本中出现了替代了方法 
  15.  
  16. offerFirst() 
  17. offerLast() 
  18.  
  19. peekFirst() 
  20. peekLast() 
  21. --获取元素,但是不删除元素,如果集合中没有该元素,那么就会返回null,不会抛出异常 
  22.  
  23. pollFirst() 
  24. pollLast() 
  25. --返回元素,并且也回删除元素,如果集合中没有该元素,那么也就返回Null,不会抛出异常 
  26. */  
  27. import java.util.*;  
  28. class JavaCollection1_4   
  29. {  
  30.     public static void main(String[] args)   
  31.     {  
  32.         LinkedList ll=new LinkedList();  
  33.         ll.addFirst("java_1");  
  34.         ll.addFirst("java_2");  
  35.         ll.addFirst("java_3");  
  36.         ll.addFirst("java_4");  
  37.         sop(ll);  
  38.         sop(ll.getFirst());  
  39.         sop(ll.getLast());  
  40.         //sop(ll.removeFirst());  
  41.         //sop(ll.removeLast());  
  42.         //sop(ll);  
  43.   
  44.         //不用迭代器使用removeFirst方法也可以取出LinkedList集合中的元素  
  45.         while(!ll.isEmpty())  
  46.         {  
  47.             sop(ll.removeFirst());  
  48.         }  
  49.         sop("**************************");  
  50.         method1();  
  51.     }  
  52.     public static void sop(Object obj)  
  53.     {  
  54.         System.out.println(obj);  
  55.     }  
  56.     public static void method1()  
  57.     {  
  58.         LinkedList ll=new LinkedList();  
  59.         ll.offerFirst("java01");  
  60.         ll.offerFirst("java02");  
  61.         ll.offerLast("java03");  
  62.         ll.offerLast("java04");  
  63.         sop(ll);  
  64.         sop(ll.peekFirst());  
  65.         sop(ll.peekLast());  
  66.         sop(ll.pollFirst());  
  67.         sop(ll.pollLast());  
  68.         sop(ll);  
  69.     }  
  70. }  

LinkedList练习:

[java]  view plain copy
  1. /* 
  2. 使用一个LinkedList来简单的模拟堆栈数据结构。 
  3. 堆栈:先进后出 
  4. 队列:先进先出 
  5. */  
  6. import java.util.*;  
  7. class JavaCollection1_5   
  8. {  
  9.     public static void main(String[] args)   
  10.     {  
  11.         QueueDemo q=new QueueDemo();  
  12.         q.add("java_1");  
  13.         q.add("java_2");  
  14.         q.add("java_3");  
  15.         q.add("java_4");  
  16.         //sop(q.get());  
  17.         while(!q.Null())  
  18.         {  
  19.             sop(q.get());  
  20.         }  
  21.   
  22.         StackDemo s=new StackDemo();  
  23.         s.add("java_1");  
  24.         s.add("java_2");  
  25.         s.add("java_3");  
  26.         s.add("java_4");  
  27.         while(!s.Null())  
  28.         {  
  29.             sop(s.get());  
  30.         }  
  31.     }  
  32.     public static void sop(Object obj)  
  33.     {  
  34.         System.out.println(obj);  
  35.     }  
  36. }  
  37. /*模拟队列*/  
  38. class QueueDemo  
  39. {  
  40.     private LinkedList link;  
  41.     QueueDemo()  
  42.     {  
  43.         link=new LinkedList();  
  44.     }  
  45.     public void add(Object obj)  
  46.     {  
  47.         link.offerFirst(obj);  
  48.     }  
  49.     public Object get()  
  50.     {  
  51.          return link.pollLast();  
  52.     }  
  53.     public boolean Null()  
  54.     {  
  55.         return link.isEmpty();  
  56.     }  
  57. }  
  58. /*模拟堆栈*/  
  59. class StackDemo  
  60. {  
  61.     private LinkedList link;  
  62.     StackDemo()  
  63.     {  
  64.         link=new LinkedList();  
  65.     }  
  66.     public void add(Object obj)  
  67.     {  
  68.         link.offerFirst(obj);  
  69.     }  
  70.     public Object get()  
  71.     {  
  72.          return link.pollFirst();  
  73.     }  
  74.     public boolean Null()  
  75.     {  
  76.         return link.isEmpty();  
  77.     }   
  78. }  

ArrayList集合练习:

[java]  view plain copy
  1. /* 
  2. 去除ArrayList中重复的元素。 
  3. 思路: 
  4. 创建一个新的ArrayList,然后在遍历需要除重的老集合,然后在判断新集合中是否存在当前遍历的元素,如果不存在,就添加到新的集合中,如果存在,那么当前元素就不用添加到新集合中。 
  5. 遍历结束后,那么新集合就是去重后的集合 
  6. */  
  7. import java.util.*;  
  8. class JavaCollection1_6   
  9. {  
  10.     public static void main(String[] args)   
  11.     {  
  12.         ArrayList al=new ArrayList();  
  13.         al.add(1);  
  14.         al.add(2);  
  15.         al.add(3);  
  16.         al.add(4);  
  17.         al.add(4);  
  18.         al.add(3);  
  19.         al.add(2);  
  20.         List list=getSingleArrayList(al);  
  21.         sop(list);  
  22.     }  
  23.     public static List getSingleArrayList(ArrayList al)  
  24.     {  
  25.          ArrayList temp_al=new ArrayList();  
  26.         for(ListIterator it=al.listIterator();it.hasNext();)  
  27.         {  
  28.             Object obj=it.next();//注意在循环中it.next()只能使用一次,马上it.hasNext()判断一次,不然就有可能报异常。  
  29.             if(!temp_al.contains(obj))//如果新集合中不存在该元素,那么便添加该元素。  
  30.             {  
  31.                 temp_al.add(obj);  
  32.             }  
  33.         }  
  34.         return temp_al;  
  35.     }  
  36.     public static void sop(Object obj)  
  37.     {  
  38.         System.out.println(obj);  
  39.     }  
  40.  

    Set集合特点:

    set集合中数据的存储和取出是无序的。而且元素时不可以重复;

    set集合Collection功能是一样的。list有操作角标的特有方法。但是set集合没有特殊的特性方法。

    set集合中常见的子类:

    HashSet -----底层的数据结构式哈希表。

    TreeSet------底层的数据结构式二叉树。

    注:Hash表的特点,先比较对象的hash值,如果hash值不同,然后就根据hash值存储在hash表中,如果hash值相同,那么就会比较对象的equal()方法。如果equal()返回的也是true,那么向hash表中存储元素就会失败。

    HashSet集合是如何在保证数据的唯一性的呢?
    1主要是通过比较元素本身的hashcode值,

    2如果hashcode值相同,那么就在比较元素的equal方法,主要元素的hash值不同,就不会比较equal方法,

    如果两个条件中只要有一个不相同,那么元素就会存储成功。


Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值