集合框架和泛型0129

本文详细介绍了Java集合框架的核心组成部分,包括接口(如Collection、List、Set和Map)、常用实现类(如ArrayList、LinkedList等)以及算法的应用。此外,重点讨论了泛型在集合框架中的重要性,展示了如何通过泛型提高代码的复用性和类型安全性。
摘要由CSDN通过智能技术生成

集合框架是Java编程语言中的一个重要部分,它提供了一组接口和类,用于存储、检索和操作对象组。这个框架定义了各种类型的集合,包括列表、队列、集合和映射。

Java集合框架主要包括以下几个部分:

  1. 接口:集合框架定义了一些基本接口,如Collection、List、Set和Map。这些接口定义了集合类应该提供的方法。
  2. 实现类:Java集合框架提供了多种实现类,如ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等。这些类实现了集合接口,提供了高效的实现。
  3. 算法:Java集合框架还包含了一些算法,如排序和搜索,这些算法可以在集合上执行。

下面是一些主要的接口和类:

  • Collection:这是所有集合的根接口,定义了添加、删除和检查元素的方法。
  • List:这是一个有序的集合,元素可以重复。List接口继承了Collection接口,并添加了一些额外的功能,如索引访问。
  • Set:这是一个无序的集合,元素不能重复。Set接口继承了Collection接口,并添加了一些额外的功能,如检查成员资格。
  • Map:这是一个键值对的集合,每个键都映射到一个值。Map接口定义了添加、删除和检索键值对的方法。

这些接口和类提供了丰富的功能,使得Java程序员可以方便地处理对象组。它们还提供了线程安全和并发控制机制,使得在多线程环境中也可以安全地使用。

一、Collection集合

Collection是Java集合框架中的根接口,它定义了所有集合的基本操作。Collection接口的主要方法包括添加、删除和检查元素。

Collection接口的一些主要方法包括:

  • add(E e): 添加一个元素到集合中。
  • remove(Object o): 删除集合中的一个元素。
  • contains(Object o): 检查集合中是否包含某个元素。
  • size(): 返回集合中的元素数量。
  • isEmpty(): 检查集合是否为空。

Collection接口是所有集合类的基本接口,包括List、Set和Queue等。这些接口都继承了Collection接口,并添加了一些特定的功能。例如,List接口提供了基于索引的访问,而Set接口不允许元素重复。

除了定义基本操作外,Java集合框架还提供了多种实现类,如ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等,这些类实现了Collection接口或其子接口,提供了高效的实现。

@Test
    public void collectionTest() {
        Collection collection=new ArrayList();
        System.out.println(collection);//[]
        boolean b=collection.add("one");//[one]
        System.out.println("b="+b);//true
        collection.add(2);//[one,2]
        collection.add('a');//[one,2,a]
        collection.add(3.14);//[one,2,a,3.14]
        collection.add("张飞");//[one,2,a,3.14,张飞]
        System.out.println(collection);
        System.out.println("----------------------");

        b= collection.contains("two");
        System.out.println("b="+b);
        b= collection.contains("one");
        System.out.println("b="+b);

        b= collection.isEmpty();
        System.out.println("b="+b);
        System.out.println("==========================");
        System.out.println("集合中的元素有:"+collection);
        b= collection.remove("one");
        System.out.println("b="+b);
        System.out.println("集合中的元素有:"+collection);
        System.out.println("==========================");
        Object[] objects=collection.toArray();
        for(int i=0;i<objects.length;i++){
            System.out.println(objects[i]);
        }
        List objects1=Arrays.asList(objects);
        System.out.println(objects1);
        System.out.println("===========================");
        Iterator it=objects1.iterator();
        /*b= it.hasNext();
        System.out.println("b="+b);
        Object obj=it.next();
        System.out.println("元素:"+obj);*/
        while (it.hasNext()==true){
            Object obj=it.next();
            System.out.println(obj);
        }
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        for(Object obj:objects1){
            System.out.println(obj);
        }



    }

二、List接口

List接口是Java集合框架中的一种接口,它继承了Collection接口,并添加了一些额外的功能。List接口表示有序的集合,元素可以重复。

List接口的主要特点包括:

  1. 有序性:List中的元素按照特定的顺序排列,可以通过索引访问元素。
  2. 元素可重复:List中的元素可以重复,即可以有多个相同的元素。
  3. 允许插入null值:List允许插入null值,表示该位置没有元素。

List接口的主要方法包括:

  • get(int index): 通过索引获取元素。
  • set(int index, E element): 通过索引设置元素。
  • add(int index, E element): 在指定位置插入元素。
  • remove(int index): 删除指定位置的元素。
  • listIterator(int index): 返回一个ListIterator对象,可以用来在指定位置插入和删除元素。

List接口的实现类包括ArrayList、LinkedList等。ArrayList基于动态数组实现,提供了快速的随机访问;LinkedList基于双向链表实现,提供了快速的插入和删除操作。

 @Test
    public  void listTest(){
        List list=new ArrayList();
        int size=list.size();
        System.out.println(size);
        System.out.println(list);
        list.add(0,"one");
        list.add(1,2);
        list.add(2,'3');
        list.add(3,3.14);
        System.out.println(list);

        List list1=new ArrayList<>();
        list1.add("two");
        list1.add(10);
        list.addAll(list1);
        System.out.println("---------------------");
        Object o=list.get(3);
        System.out.println(o);
        o=list.set(0,1);
        System.out.println("下标为0的位置修改为:"+o);
        System.out.println(list);

        o=list.remove(0);
        System.out.println("删除的元素:"+o);
        System.out.println("============================");
        System.out.println(list);
        List list2=list.subList(0,3);
        System.out.println("list集合:"+list);
        System.out.println("字集合中的元素"+list2);
        list2.remove(0);

    }

三、 Queue集合

Queue是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,在表的后端(rear)进行插入操作。这种数据结构遵循先进先出(FIFO)的原则。

Queue接口的主要方法包括:

  • add(E e): 在队列尾部添加一个元素。
  • remove(): 移除并返回队列头部的元素。如果队列为空,则抛出异常。
  • peek(): 返回队列头部的元素,但不移除它。如果队列为空,则返回null。
  • poll(): 移除并返回队列头部的元素。如果队列为空,则返回null。

Queue接口的实现类包括LinkedList、PriorityQueue、ArrayBlockingQueue等。LinkedList作为实现类之一,它基于双向链表实现,具有插入和删除操作效率较高的特点。PriorityQueue是一个优先级队列,它的元素按照自然顺序或者比较器定义的顺序进行排序。ArrayBlockingQueue是一个基于数组的有界阻塞队列,它实现了BlockingQueue接口,可以在多线程环境中安全使用。

在Java集合框架中,Queue接口通常用于实现生产者消费者模型,生产者用于向队列中添加元素,而消费者用于从队列中取出元素。这种模型可以有效地协调多个线程之间的操作,提高程序的并发性能。

 @Test
    public void queueTest(){
        Queue<Integer> queue=new LinkedList<>();
        for(int i=1;i<=5;i++){
            queue.offer(i*11);
            System.out.println(queue);
        }
        Integer it=queue.peek();
        System.out.println("队首元素:"+it);
        int len=queue.size();
        for(int i=0;i< len;i++){
            Integer it1=queue.poll();
            System.out.println(it1);
        }
    }

四、Set集合

Set是一种不包含重复元素的集合。Set集合也是继承了Collection,所以Collection中的操作广场对Set集合同样适用。

Set集合的主要特点包括:

  1. 无序性:Set中的元素没有特定的顺序,即无法通过索引访问元素。
  2. 不允许重复元素:Set中的元素不能重复,即每个元素只能出现一次。

Set接口的主要方法包括:

  • add(E e): 添加一个元素到集合中。
  • remove(Object o): 删除集合中的一个元素。
  • contains(Object o): 检查集合中是否包含某个元素。
  • size(): 返回集合中的元素数量。
  • isEmpty(): 检查集合是否为空。

Set接口的实现类包括HashSet、TreeSet等。HashSet基于哈希表实现,其性能通常优于TreeSet,但在需要排序的功能时,我们才使用TreeSet。TreeSet基于树结构实现,可以对元素进行升序排序。

总的来说,Set集合主要用于存储唯一元素,并提供了常用的集合操作。在Java集合框架中,Set接口和它的实现类被广泛应用于各种数据结构和算法中,以解决各种实际问题。

@Test
    public void setTest(){
        Set<String> set=new HashSet<>();
        boolean b=set.add("two");
        System.out.println("b="+b);
        System.out.println(set);
        b=set.add("one");
        System.out.println("b="+b);
        System.out.println(set);
        b=set.add("three");
        System.out.println("b="+b);
        System.out.println(set);
        b=set.add("four");
        System.out.println("b="+b);
        System.out.println(set);
        b=set.add("five");
        System.out.println("b="+b);
        System.out.println(set);
        b=set.add("one");
        System.out.println("b="+b);
        System.out.println(set);

    }

 五、Map集合

Map是一种特殊的集合,它存储的是键值对。Map集合中的每个元素包含一个键对象和一个值对象,其中键对象唯一标识该元素,而值对象可以重复。Map集合可以通过键映射到值,即通过键查找对应的值。

Map接口的主要方法包括:

  • put(K key, V value): 添加或更新一个键值对。
  • get(Object key): 通过键获取对应的值。
  • remove(Object key): 删除指定键的键值对。
  • containsKey(Object key): 检查集合中是否包含指定的键。
  • containsValue(Object value): 检查集合中是否包含指定的值。

Map接口的实现类包括HashMap、TreeMap等。HashMap基于哈希表实现,它使用哈希算法来快速定位键值对。TreeMap基于红黑树实现,它按照键的自然顺序或者自定义比较器定义的顺序进行排序。

在Java集合框架中,Map集合主要用于存储键值对数据,并提供快速查找、添加和删除操作。Map集合常用于需要映射关系的数据结构,如数据库查询、缓存系统等。通过使用Map集合,可以方便地实现数据的快速查找和操作,提高程序的性能和效率。

 @Test
    public void hashMapTest(){
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"a");
        map.put(2,"b");
        map.put(3,"c");
        map.put(4,"d");
        System.out.println(map);

        String value=map.get(3);
        System.out.println("3="+value);

        boolean b=map.containsKey(5);
        System.out.println(b);
        b=map.containsKey(2);
        System.out.println(b);

        b=map.containsValue("eefa");
        System.out.println(b);
        b=map.containsValue("a");
        System.out.println(b);

        String v=map.remove(3);
        System.out.println("删除的值为:"+v);
        v=map.remove(5);
        System.out.println("删除的值为:"+v);

    }
    @Test
    public void interatorMapTest(){
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"a");
        map.put(2,"b");
        map.put(3,"c");
        map.put(4,"d");
        System.out.println(map);
        System.out.println("------------------------");
        Set<Integer> set=map.keySet();
        for(Integer it:set){
            System.out.println(it+"="+map.get(it));
        }
        System.out.println("=========================");
        Set<Map.Entry<Integer,String>> entries=map.entrySet();
        for(Map.Entry<Integer,String> e:entries){
            System.out.println(e);
        }
    }

 六、泛型

泛型是Java编程语言的一种特性,它允许在类、接口和方法的定义中使用类型参数。这些类型参数在实例化对象或调用方法时被具体的类型替代,从而实现了代码的复用性和类型安全性。

泛型的主要目的是提高代码的灵活性和复用性,使得相同的代码可以处理多种数据类型,而不需要进行大量的重写和修改。通过使用泛型,程序员可以在不改变代码逻辑的前提下,将代码应用于各种不同的数据类型。

在Java集合框架中,泛型被广泛应用。例如,ArrayList、LinkedList等集合类都使用了泛型,通过指定元素类型来创建特定类型的集合。这使得集合类可以存储、操作特定类型的对象,并在编译期间进行类型检查,避免了运行时类型转换和ClassCastException异常。

使用泛型时,需要使用尖括号<>来指定类型参数。例如,ArrayList<String>表示一个存储String类型元素的ArrayList集合。

值得注意的是,泛型在运行期间会失去类型信息,这是因为泛型是在编译期进行类型检查的。因此,泛型参数只能是类类型,不能是原始数据类型(如int、char等)。

总的来说,泛型是Java编程语言中一个强大的工具,它能够提高代码的复用性和安全性,使得代码更加灵活和易于维护。通过使用泛型,可以避免许多常见的类型错误,并提高程序的可靠性。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值