java中集合框架知识

本文详细介绍了Java集合框架的核心概念,包括接口、实现类(如ArrayList和HashMap)、迭代器的使用,以及ArrayList和HashMap的特性和方法。重点强调了泛型在类型安全方面的优势,展示了Java集合框架如何提高程序效率和可维护性。
摘要由CSDN通过智能技术生成

一:集合的介绍

Java集合(Java Collections)是Java编程语言中一个重要的部分,用于存储和操作一组对象。Java集合框架提供了一套预定义的类和接口,使得程序员能够轻松地处理数据集合,如数组、列表、队列、栈、集合、映射等。

集合与数组的区别 
 
数组和集合类同是容器,数组虽然也可以存储对象,但其长度是
固定的,而集合的长度是可变的。 
数组只能存储同种数据类型的数据,包含基本数据类型和对象引
用类型,而集合只能存储对象,并且可以存储不同类型的对象。 
 
数组和集合类同是容器,数组虽然也可以存储对象,但其长度是
固定的,而集合的长度是可变的。 
数组只能存储同种数据类型的数据,包含基本数据类型和对象引
用类型,而集合只能存储对象,并且可以存储不同类型的对象。

二:Java集合框架主要包括:

  1. 接口:这些是抽象数据类型,表示不同类型的集合,如 Set、List、Queue、Deque 和 Map。每种类型的集合都有其特定的使用场景。
  2. 实现类:这些是实现上述接口的具体类。例如,ArrayList 和 LinkedList 是 List 接口的实现类;HashSet 和 TreeSet 是 Set 接口的实现类;HashMap 和 TreeMap 是 Map 接口的实现类。
  3. 算法:Java 集合框架提供了一系列高效的算法来操作这些集合,如排序和搜索。
  • 迭代器:迭代器(Iterator)是一种设计模式,用于遍历容器(特别是列表和集合)。
    Java集合框架内容

三:ArrayList类和HashMap集合

 1:ArrayList类

   ArrayList是List接口的直接实现类,实现了可变的数组功能。

优点:允许包含所有元素,包括NULL,使用ArrayList可以根据索引位
置对集合进行快速地随机访问。 
缺点:向指定的索引位置插入对象或删除对象的速度较慢,因为向索引
位置插入对象时会将指定索引位置及之后的所有对象相应向后移
动一位。
2:ArrayList构造方法

3:ArrayList类常用方法 
增加元素到列表中 1:boolean add(Element e)--增加指定元素到列表尾部。 
2:void add(int index, Element e)--增加指定元素到列表指定位置。
检查列表是否为空 boolean isEmpty()--返回true表示列表中没有任何元素。
获取列表大小int size()--返回列表长度(列表包含元素的个数)。
搜索元素 1:boolean contains(Object o)--如果列表包含指定元素,返回true。 
2:int indexOf(Object o)--返回元素在列表中第一次出现的位置,
如果返回-1,表示列表中没有这个元素。 
3:int lastIndexOf(Object o)--返回元素在列表中最后一次出现的位
置,如果返回-1,表示列表中没有这个元素。 
获取列表中的元素 E get(int index)--获取列表中指定位置处的元素,E为对应的元
素类型。 
修改某个元素 E set(int index, E element)--将列表中指定位置上的元素替换
成新元素,E为对应的元素类型。 
从列表中删除元素 1:E remove(int index)--删除列表中指定位置的元素,E为对应的元
素类型。 
2:boolean remove(Object o)--删除列表中首次出现的指定元素
(如果存在)。 
  • 3:void clear()--从列表中删除所有元素。 

4:程序举例

1.产生10个50-100之间的随机数,并放到一个数组中,把数组中大于或等于
80的数放到一个list集合中,并打印到控制台。
 

运行结果

2:HashMap集合

HashMap是基于哈希表的 Map 接口的实现。

1:在HashMap中,key-value总是会当做一个整体来处理,系统会
根据hash算法来计算key-value的存储位置,可以通过key快速
地存取value,因此HashMap在添加和删除映射关系时的效率更
高。
2:HashMap允许使用null值和null键,但必须保证键的唯一性。 
3:HashMap通过哈希表对其内部的映射关系进行快速查找,但
HashMap不能保证映射的顺序。 
4:常用方法
添加元素功能V put(K key,V value)--添加元素,如果键是第一次存储,就直接
存储元素,返回null;如果键不是第一次存储,之前已经存在,就
用值把以前的值替换掉并返回以前的值。
检查集合是否为空 boolean isEmpty()--返回true表示列表中没有任何元素。
获取集合大小int size()--返回集合中的键值对的个数。
查询功能 1:boolean containsKey(Object key)--判断集合是否包含指定的键:2:boolean containsValue(Object value)--判断集合是否包含指定
的值。 
获取元素功能 1:V get(Object key)--根据键获取值。 
2:Set<K> keySet()--获取集合中所有键的集合。 
3:Collection<V> values()--获取集合中所有值的集合。
删除元素功能 1:V remove(Object key)--根据键删除键值对元素,并把值返回 
:2:void clear()--移除所有的键值对元素。
HashMap构造方法 

HashMap():构造一个空的 HashMap ,默认初始容量(16)
和默认负载系数(0.75)

5:程序举例
import java.util.HashMap;  
import java.util.Map;  
  
public class HashMapExample {  
    public static void main(String[] args) {  
        // 创建一个HashMap对象  
        Map<String, Integer> map = new HashMap<>();  
  
        // 添加键值对  
        map.put("Alice", 25);  
        map.put("Bob", 30);  
        map.put("Charlie", 35);  
  
        // 获取键对应的值  
        int aliceAge = map.get("Alice");  
        System.out.println("Alice's age: " + aliceAge);  
  
        // 遍历键值对  
        for (Map.Entry<String, Integer> entry : map.entrySet()) {  
            String name = entry.getKey();  
            int age = entry.getValue();  
            System.out.println(name + " is " + age + " years old.");  
        }  
  
        // 判断键是否存在  
        if (map.containsKey("Bob")) {  
            System.out.println("Bob exists in the map.");  
        } else {  
            System.out.println("Bob does not exist in the map.");  
        }  
  
        // 删除键值对  
        map.remove("Charlie");  
        System.out.println("Charlie has been removed from the map.");  
    }  
}

我们创建了一个HashMap对象,并向其中添加了三个键值对。然后,我们通过键获取对应的值,并遍历整个HashMap,输出每个键值对的内容。最后,我们判断一个键是否存在,并删除一个键值对。

3:遍历 

1:ArrayList集合列表元素的遍历 
public static void main(String[] args){
    List<String> list=new ArrayList<String>();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    //遍历列表中的所有元素
    System.out.println("方法1:使用元素的索引和列表的大小");
    for(int i=0;i<list.size();i++){
        System.out.println(list.get(i));
    }

    System.out.println("方法2:使用foreach循环");
    for(String s :list){
        System.out.println(s);
    }

    System.out.println("方法3:使用迭代器");
    Interator<String> it=list.iterator();
    while(it.hashNext()){
        System.out.println(it.next());
    }
}

  • 2:Map集合的遍历
在foreach循环中遍历keys或values如果只需要map中的键或者值,可以通过keySet或values来实
现遍历。
在foreach循环中使用entries遍历(推荐使用)1:Set<Map.Entry<K,V>> entrySet() --返回此map中包含的映
射关系的Set视图。 
2:Map.Entry:描述在一个Map中的一个元素(键/值对),是一
个 Map 的内部接口。 
使用Iterator遍历 1:从性能方面看,该方法类同于foreach遍历的性能。 
2:在老版本java中这是遍历map的唯一方式。 
通过键找值遍历 该方法代码简洁但实际上效率较低,因为从键取值是耗时的操作,
所以尽量避免使用 

4: 泛型

1:泛型的介绍:

 1:泛型是一种参数化类型的机制,它可以使得代码适用于各种类
型,从而编写更加通用的代码。
2:在泛型使用过程中,操作的数据类型被指定为一个参数,这种参
数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接
口、泛型方法。

2:泛型的作用

类型安全集合默认的存储类型为Object类型,向list对象加入了一个字符
串类型的值和一个Integer类型的值,这样是合法的操作。

2:在之后的循环中进行取值强转时,由于忘记了之前在list中加入
了Integer类型的值或其他原因,运行时会出现
java.lang.ClassCastException异常。
3: 为了解决这个问题,泛型应运而生。Java泛型编程是JDK1.5版本后
引入的,泛型让编程人员能够使用类型抽象,通常用于集合里面。

4:通过使用List<String>直接限定了List集合中只能存储String类型的
元素。那么就会在编译list.add(100)时报错,从而避免了在运行时发
生错误。由于集合记住元素的类型信息,因此无须再进行强制类型
转换。
5:类型安全,消除强制类型转换
6:

4:总结

Java集合框架的接口与具体实现分离,各种类型的集合接口与具体实现可以方便地相互转换,使开发者能够灵活地使用不同的集合类型,从而提高程序的效率和可维护性。总之而言,Java集合框架为开发者提供了丰富、高效、可复用的数据结构和算法,有助于提高程序的质量和效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值