Java基础第三部分-集合

Java集合数据结构:
java集合数据结构

集合概述:

Java是一门面向对象的语言,就免不了处理对象,为了方便操作多个对象,那么我们就得把这多个对象存储起来,想要存储多个对象(变量),很容易就能想到一个容器(集合) 来装载

Java集合框架主要包括两种类型的容器,一种是单列集合(Collection),另一种是双列集合(Map),Java集合大致也可分成List、Set、Queue、Map四种接口体系
Collection接口又有3种子类型,List、Set和Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap等等。Map常用的有HashMap,LinkedHashMap等。

(1)Collection:单列集合类的父接口,用于存储一系列的元素,它有两个重要的子接口,分别是List和 Set;其中,List的特点是元素有序、元素可重复Set的特点是元素无序并且不可重复;List接口的主要实现类有ArrayList和LinkedList, Set接口的主要实现类有HashSet和 TreeSet。

(2)Map:双列集合类的父接口,用于存储具有键(Key)、值(Value)映射关系的元素;每个元素都包含一对键值,在使用Map集合时可以通过指定的Key找到对应的Value,例如,根据一个学生的学号就可以找到对应的学生。Map接口的主要实现类有HashMap和TreeMap。

本文Java基础-集合主要讲述ArrayList和HashMap

Collection接口与类

在这里插入图片描述

Map接口与类

在这里插入图片描述

集合与数组的区别

(1)长度区别:集合长度可变,数组长度不可变
(2)内容区别:集合可存储不同类型元素,数组存储只可单一类型元素
(3)元素区别:集合只能存储引用类型元素,数组可存储引用类型,也可存储基本类型

集合特点(接口特征)

1、List(有序、可重复)

List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

2、Set(无序、不能重复)

Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

3、Map(键值对、键唯一、值不唯一)

Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。

一、ArrayList

![在这里插入图片描述](https://img-blog.csdnimg.cn/8f1e594a4204487b9fdad1a3e82c8f4b.png

ArrayList 继承了 AbstractList ,并实现了 List 接口。

List接口:

	List接口继承自Collection接口,是单列集合的一个重要分支,实现了List接口的对象称为List集合。
	在List集合中允许出现重复的元素,所有的元素以线性方式进行存储,可以通过索引来访问集合中的指定元素。
	另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致;
	List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,
	而且还增加了一些根据元索索引来操作集合的特有方法。

List接口特征:

有序 : 添加顺序和存储顺序一致
可重复 : 保存元素中允许出现相同元素
List接口是继承Collection接口,也就是说,可以使用Collection接口下的所有方法:

Collection接口方法:

Collection是所有单列集合的父接口,因此在Collection中定义的单列集合(List和Set)通用的一些方法,这些方法可以操作于所有的单列集合

增删改查:

:
	add(E e); 添加符合当前集合要求的元素到集合末尾。
	add(int index, E e); 添加符合当前集合要求的元素,到集合中的指定下标位置
	addAll(Collection<? extends E> c);添加另一个集合到当前集合的末尾
	addAll(int index, Collection<? extends E> c);在指定下标位置添加另一个集合元素
	

删:
	clear(); 删除集合中的所有元素
	remove(Object obj); 删除集合中的指定元素
	removeAll(Collection<?> c); 删除两个集合的交集
	retainAll(Collection<?> c); 保留两个集合的交集
	remove(int index); 删除集合中指定下标的元素

改:
	E set(int index, E e);
	使用指定元素替换指定下标的元素,并且返回被替换元素

查:
	E get(int index); 获取指定下标的元素
	int size();	有效元素个数
	boolean isEmpty(); 判断集合是否为空
	boolean contains(Object obj); 判断当前集合中是否包含指定元素
	boolean containsAll(Collection<?> c); 判断c是不是当前集合的子集合
	int indexOf(Object obj); 找出指定元素在集合中第一次出现的位置
	int lastIndexOf(Object obj); 找出指定元素在集合中最后一次出现的位置
	List<E> subList(int fromIndex, int toIndex); 获取当前集合的子集合
    





使用格式:

	import java.util.ArrayList; // 导包

    ArrayList<Integer> num = new ArrayList<>(); 
    // 创建ArrayList 集合对象

<Integer>: 泛型数据类型,用于设置 num 集合的数据类型,只能为引用数据类型。
num:集合对象名

泛型知识点详见:Java基础-泛型(Generics)

ArrayList 集合基础方法的使用:

       
        public static void main(String[] args) {
        ArrayList<Integer> nums = new ArrayList<Integer>();
        System.out.println("集合是否为空:"+nums.isEmpty()); // 集合是否为空
        // add方法添加元素
        nums.add(1);    // add(E e); 添加到末尾
        nums.add(2);
        nums.add(3);
        nums.add(4);
        nums.add(4,5);  // add(int index, E e); 添加到指定下标
        nums.add(5);
        nums.add(7);
        nums.add(8);
        nums.add(9);

        System.out.println("集合是否为空:"+nums.isEmpty()); // 集合是否为空
        System.out.println("打印输出集合:"+nums); // [1, 2, 3, 4, 5, 5, 7, 8, 9]
        System.out.println("集合元素个数:"+nums.size());  // 获取集合中元素个数
        System.out.println("下标为0的元素:"+nums.get(0)); // 下标访问元素

        System.out.println(nums.set(5,6));  // E set(int index, E e);  替换指定下标元素,返回被替换元素
        System.out.println("修改后打印输出集合:"+nums); // [1, 2, 3, 4, 5, 5, 7, 8, 9]
        nums.remove(8);   //  删除集合中的指定下标元素
        System.out.println("删除后打印输出集合:"+nums); // [1, 2, 3, 4, 5, 5, 7, 8, 9]
        // for循环迭代遍历
        for (int i=0;i< nums.size();i++) {
            System.out.print(nums.get(i));
        }
        System.out.println();   // 换行
        // for-each 迭代元素
        for (int i:nums) {
            System.out.print(i);
        }
        System.out.println();   // 换行
        nums.clear();   //  删除集合中的所有元素
        System.out.println("clear集合后是否为空:"+nums.isEmpty()); // 集合是否为空
    }




二、HashMap

Map接口(接口特征):

1.是一个双列集合,赋值的时候必须同时给key和value赋值
2.是一个无序的集合(存入和取出元素的顺序可能不一致)
3.key值不能重复,value可以重复
4.一个key只能对应一个vlaue
5.定义集合时,数据类型key和value可以使用相同的数据类型,也可以使用不同的数据类型

HashMap特征:

HashMap存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
HashMap 是无序的,即不会记录插入的顺序。

Map接口常用方法:

方法说明
int size();有效元素个数
boolean isEmpty();判断集合是否为空
V get(Object key);获取key
V put(K key, V value);获取key对应的value
V remove(Object key);删除key键的数据
void clear();清空数据
int hashCode();获取Hash值

使用格式:

	import java.util.HashMap; // 引入 HashMap 类
	
	// 创建 HashMap 集合对象,整型(Integer)的 key 和字符串(String)类型的 value:
	HashMap<Integer, String> map= new HashMap<Integer, String>();

HashMap集合基础方法的使用:


    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<Integer,String>();
        //  添加键值数据
        map.put(1,"张三");
        map.put(2,"李四");
        map.put(3,"王五");
        map.put(4,"zhaoliu");
        System.out.println("map是否为空"+map.isEmpty());// 是否为空
        System.out.println("key为4的值 :"+map.get(4));//   获取指定 key 对应对 value
        map.replace(4,"赵六");  //    替换 hashMap 中是指定的 key 对应的 value。
        System.out.println("获取修改后value"+map.get(4));//   获取修改后value
        System.out.println("删除key为4的数据");
        map.remove(4);
        System.out.println("map的有效元素个数"+map.size());
        System.out.println("Hash 值"+map.hashCode()); //  获取 Hash 值
        // hashmap迭代输出
        for (Integer i:map.keySet()) {
            System.out.println("key :"+i+"  value :"+map.get(i));
        }
        map.clear();// 清空数据
        System.out.println("map是否为空"+map.isEmpty());// 是否为空
    }



常见集合优劣与选择:

在这里插入图片描述

总结:

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执着与它共情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值