java总结--集合(一)

本文深入讲解Java集合框架,包括Collection、List、Set等接口及其实现类的特点与应用场景,对比不同集合类的数据结构优劣,并介绍集合操作的基本方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合(Collection)

  1. 集合的由来:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。(数组的长度固定,所以不适合做变化的需求)
  2. 集合和数组的区别:
    A.长度区别:数组长度固定;集合长度是可变的
    B.内容区别:数组可以是基本类型,也可以是引用类型;集合只能是引用类型
    C.元素内容:数组只能存储同一种类型;集合可以存储不同类型(但其实集合存储的也是同一种类型)
  3. 集合的继承体系结构?
          由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。
    (部分)Collection
                    List:ArrayList;Vector;LinkedList
                    Set:TreeSet;HashSet
  4. Collection功能概述:
     A:添加功能:boolean add(E e);boolean addAll(Collection c)
     B:删除功能:boolean remove(Object o);boolean removeAll(Collection c);void clear()
     C:判断功能:boolean contains(Object o);boolean containsAll(Collection c);boolean isEmpty()
     D:长度功能:int size()
     E:交集(了解):boolean retainAll(Collection c)
    F:把集合转数组(了解):Object[] toArray()
  5. Collection集合的遍历
    A:把集合转数组(了解)
    B:迭代器(集合专用方式)
  6. 迭代器
    A.是集合的获取元素的方式。
    B.是依赖于集合而存在的。
    C.迭代器的使用步骤:①通过集合对对象获取迭代器对象;②通过迭代器对象判断;③通过迭代器对象获取
  7. Collection集合的例子
    ①集合的操作步骤:A:创建集合对象
                                     B:创建元素对象
                                     C:把元素添加到集合
                                      D:遍历集合
    ②例子
    A.存储字符串并遍历
    import java.util.Collection;
    			import java.util.ArrayList;
    			import java.util.Iterator;
    			
    			public class CollectionDemo {
    				public static void main(String[] args) {
    					//创建集合对象
    					Collection c = new ArrayList();
    					
    					//创建并添加元素
    					c.add("hello");
    					c.add("world");
    					c.add("java");
    					
    					//遍历集合
    					Iterator it = c.iterator();
    					while(it.hasNext()) {
    						String s =(String) it.next();
    						System.out.println(s);
    					}
    				}
    			}

      B.存储自定义对象并遍历

    public class Student {
    				private String name;
    				private int age;
    				
    				public Student(){}
    				
    				public Student(String name,int age) {
    					this.name = name;
    					this.age = age;
    				}
    				
    				//getXxx()/setXxx()
    			}
    			
    			import java.util.Collection;
    			import java.util.ArrayList;
    			import java.util.Iterator;
    			
    			public class StudentDemo {
    				public static void main(String[] args) {
    					//创建集合对象
    					Collection c = new ArrayList();
    					
    					//创建学生对象
    					Student s1 = new Student("林青霞",27);
    					Student s2 = new Student("风清扬",30);
    					Student s3 = new Student("刘意",30);
    					Student s4 = new Student("武鑫",25);
    					Student s5 = new Student("刘晓曲",16);
    					
    					//添加元素
    					c.add(s1);
    					c.add(s2);
    					c.add(s3);
    					c.add(s4);
    					c.add(s5);
    					
    					//遍历集合
    					Iterator it = c.iterator();
    					while(it.hasNext()) {
    						Student s = (Student)it.next();
    						System.out.println(s.getName()+"---"+s.getAge());
    					}
    				}
    			}

     

List 

  1. List是Collection的子接口,特点是:有序(存储顺序和取出顺序一致),可重复。
  2. List的特有功能:
    A.添加功能:void add(int index,E element)
    B.删除功能:
    E remove(int index)
    C.获取功能:E get(int index)
    D.迭代器功能:
    ListIterator listIterator()
    E.修改功能:E
    set(int index,E element)
  3. List集合的特有遍历功能
    A.由size()和get()结合。
    B.代码演示
    //创建集合对象
    					List list = new ArrayList();
    					
    					//创建并添加元素
    					list.add("hello");
    					list.add("world");
    					list.add("java");
    					
    					//遍历集合
    					Iterator it = list.iterator();
    					while(it.hasNext()) {
    						String s =(String) it.next();
    						System.out.println(s);
    					}
    					System.out.println("----------");
    					
    					for(int x=0; x<list.size(); x++) {
    						String s =(String) list.get(x);
    						System.out.println(s);
    					}
  4. 列表迭代器的特有遍历功能:可以逆向遍历,但是要先正向遍历,所以无意义,基本不使用。
  5. 并发修改异常
    A.出现的现象:迭代器遍历集合,集合修改集合元素
    B.原因:迭代器是依赖于集合的,而集合的改变迭代器并不知道。
    C.解决方法:集合遍历,集合修改(size()和get());元素添加在集合的末尾
  6. 常见数据结构
    A:栈 先进后出
    B:队列 先进先出
    C:数组 查询快,增删慢
    D:链表 查询慢,增删快
  7. List的子类特点(面试题)
    (1)①ArrayList:底层数据结构是数组,查询快,增删慢; 线程不安全,效率高。
             ②Vector:底层数据结构是数组,查询快,增删慢;线程安全,效率低。
             ③LinkedList:底层数据结构是链表,查询慢,增删快; 线程不安全,效率高。
     (2)Vector(有特有功能要学习)
             ①添加:public void addElement(E obj)        --    add()
             ②获取:public E elementAt(int index)        --    get()
                           public Enumeration<E> elements()    --  iterator()
      (3)LinkedList(有特有功能要学习)
             ①添加:addFirst();addLast()
             ②删除:removeFirst();removeLast()
             ③获取:getFirst();getLast()

     

Set

  1. Set集合的特点:无序,唯一。
  2. HashSet集合(掌握)
    A.底层数据结构是哈希表(是一个元素为链表的数组)
    B.哈希表底层依赖两个方法:hashCode()和equals()
        执行顺序:首先比较哈希值是否相同,若相同:继续执行equals()方法,返回true:元素重复了,不添加,返回false:直       接把元素添加到集合;若不同:就直接把元素添加到集合
    C.:如何保证元素唯一性的呢?答:由hashCode()和equals()保证的。
    D.开发的时候,代码非常的简单,自动生成即可。
  3. TreeSet集合
    A.底层数据结构是红黑树(是一个自平衡的二叉树)
    B.保证元素的排序方式:①自然排序(元素具备比较性):让元素所属的类实现Comparable接口;
                                         ②比较器排序(集合具备比较性):让集合构造方法接收Comparator的实现类对象。
  4. :在集合中常见的数据结构(掌握)
    ArrayXxx:底层数据结构是数组,查询快,增删慢
    LinkedXxx:底层数据结构是链表,查询慢,增删快
    HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
    TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值