【JAVA】数据存储——集合

目录

【集合体系】

【Collection集合】

【List集合】

【ArrayList集合】

【LinkList集合】

【Set集合】

【TreeSet集合】

【HashSet集合】

【Map集合】

【HashMap集合】

【TreeMap集合】

【不可变的集合】

【可变参数】

【创建不可变集合】


【集合体系】

0a3041454ace4849b4b6646930e72c64.png

注意:单列集合一次只能存一个数据,双链集合一次可以存两个数据

【Collection集合】

【概述】

  • 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
  • JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现

【Collection集合构造方法】

  • 多态的方式
  • 具体的实现类ArrayList、LinkedList、HashSet、TreeSet

例:Collection<E> list=new ArrayList();

【成员方法】

boolean add(E e):添加元素

boolean remove(Object o):从集合中移除指定的元素

boolean removeif(Object o):根据条件进行删除

void clear():清空集合

boolean contains(Object o):判断集合中是否存在指定的元素

boolean isEmpty():判断集合是否为空

int size():集合的长度,也就是集合中元素的个数

reverse():方法用于反转给定list(l)元素的顺序(静态方法)

【Iterator】迭代器,集合的专用遍历方式

【构造方法】:Iterator<E> iterator():返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引

例:Iterator<E> it = list.iterator();

【成员方法】

boolean hasNext():判断当前位置是否有元素可以被取出

E next():获取当前位置的元素并将迭代器对象移向下一个索引位置

【增强for循环】:简化数组和Collection集合的遍历

【使用场景】:实现Iterable接口的类才能使用

【格式】:

for(元素数据类型 变量名 : 数组或者Collection集合) {

//在此处使用变量即可,该变量就是元素

}

例:

ArrayList<String> list = new ArrayList<>();
//添加一些元素
for(String s : list) {
    System.out.println(s);
}

【注意】:三种循环的使用场景

  • 如果需要操作索引,使用普通for循环
  • 如果在遍历的过程中需要删除元素,请使用迭代器
  • 如果仅仅想遍历,那么使用增强for

【List集合】

【概述】:

  • 有序集合,这里的有序指的是存取顺序
  • 用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素
  • 与Set集合不同,列表通常允许重复的元素

【List集合构造方法】

  • 多态的方式
  • 具体的实现类ArrayList、LinkedList

例:List<E> list=new ArrayList();

【特点】:

  • 有序:存储和取出的元素顺序一致
  • 有索引:可以通过索引操作元素
  • 可重复:存储的元素可以重复

【特有成员方法】:

void add(int index,E element):在此集合中的指定位置插入指定的元素

E remove(int index):删除指定索引处的元素,返回被删除的元素

E set(int index,E element):修改指定索引处的元素,返回被修改的元素

E get(int index):返回指定索引处的元素

【ArrayList集合】

【JAVA】ArrayList数组集合_Lx_Hy_的博客-CSDN博客https://blog.csdn.net/huihu__/article/details/124271611?spm=1001.2014.3001.5501

【LinkList集合】

【构造方法】:(空参构造)

LinkedList():创建一个空的集合对象

例:LinkedList<E> list =new LinkedList();

【成员方法】:
public void addFirst(E e):在该列表开头插入指定的元素

public void addLast(E e):将指定的元素追加到此列表的末尾

public E getFirst():返回此列表中的第一个元素

public E getLast():返回此列表中的最后一个元素

public E removeFirst():从此列表中删除并返回第一个元素

public E removeLast():从此列表删除并返回最后一个元素

【Set集合】

【Set集合构造方法】:

  • 多态的方式
  • 具体的实现类HashSet、TreeSet

例:Set<E> set=new TreeSet();

【特点】:

  • 可以去除重复
  • 存取顺序不一致
  • 没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取,删除Set集合里面的元素

【TreeSet集合】

【构造方法】:(空参构造)

TreeSet():创建一个空的集合对象

例:TreeSet<E> ts=new TreeSet();

【特点】:

  • 不包含重复元素的集合
  • 没有带索引的方法
  • 可以将元素按照规则进行排序

排序规则的方法

【Comparable】:自然排序

  1. 使用空参构造创建TreeSet集合
  2. 自定义的Student类实现Comparable接口
  3. 重写里面的compareTo​方法

【comparator】:比较器排序

  1. TreeSet的带参构造方法使用的是比较器排序对元素进行排序的
  2. 比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare​(T o1,T o2)方法
  3. 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写

两种方式对于返回值的规则:

  • 如果返回值为负数,表示当前存入的元素是较小值,存左边
  • 如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存
  • 如果返回值为正数,表示当前存入的元素是较大值,存右边

注意:在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,使用比较器排序

【TreeSet模型—红黑树】:平衡二叉B树,是一种特殊的二叉查找树

【添加规则】:红黑规则

  1. 每一个节点或是红色的,或者是黑色的。
  2. 根节点必须是黑色
  3. 如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的;
  4. 不能出现两个红色节点相连的情况
  5. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点;

【添加节点步骤】:

7edad2ad1d134e4dbd9e73e47302f758.png

【HashSet集合】

【构造方法】:(空参构造)

HashSet():创建一个空的集合对象

例:HashSet<E> hs=new HashSet();

【特点】:

  • 底层数据结构是哈希表
  • 对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
  • 没有带索引的方法,所以不能使用普通for循环遍历
  • 由于是Set集合,所以元素唯一

【哈希值】:是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值

【成员方法】:Object类中有一个方法可以获取对象的哈希值

public int hashCode​():返回对象的哈希码值

【特点】:

  • 如果没有重写hashCode方法,那么是根据对象的地址值计算出哈希值。同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 如果重写了hashCode方法,一般都是通过对象的属性值计算出哈希值。如果不同的对象属性值是一样的,那么计算出来的哈希值也是一样的

【Map集合】

【概述】:

  • Interface Map<K,V>  K:键的数据类型;V:值的数据类型
  • 键不能重复,值可以重复
  • 键和值是一一对应的,每一个键只能找到自己对应的值
  • (键 + 值)这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做“Entry对象”。

【Map集合构造方法】

  • 多态的方式
  • 具体的实现类HashMap、TreeMap

例:Map<E> map=new HashMap();

【成员方法】:

V put(K key,V value):添加元素(注意:如果添加的键是存在的,那么会覆盖原先的值,把原先的值当作返回值进行返回

V remove(Object key):根据键删除键值对元素

void clear():移除所有的键值对元素

boolean containsKey(Object key):判断集合是否包含指定的键

boolean containsValue(Object value):判断集合是否包含指定的值

boolean isEmpty():判断集合是否为空

int size():集合的长度,也就是集合中键值对的个数

集合获取:

方法一:

V get(Object key):根据键获取值

Set<K> keySet():获取所有键的集合

方法二:

Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合

K  getKey():获得键

V  getValue():获得值

【HashMap集合】

【构造方法】:(空参构造)

HashMap():创建一个空的集合对象

例:HashMap<E> hm=new HashMap();

【特点】:

  • HashMap底层是哈希表结构的
  • 没有带索引的方法,所以不能使用普通for循环遍历
  • 依赖hashCode方法和equals方法保证的唯一
  • 如果要存储的是自定义对象,需要重写hashCode和equals方法

【TreeMap集合】

【构造方法】:(空参构造)

TreeMap():创建一个空的集合对象

例:TreeMap<E> tm=new TreeMap();

【特点】:

  • TreeMap底层是红黑树结构的
  • 没有带索引的方法,所以不能使用普通for循环遍历
  • 依赖自然排序或者比较器排序,对进行排序
  • 如果存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时候给出比较器排序规则

【不可变的集合】

【可变参数】

【概述】:就是形参的个数是可以变化的

【格式】:修饰符 返回值类型 方法名(数据类型… 变量名) {  }

例:public static int sum(int… a) {  }

注意:

  • 这里的变量其实是一个数组
  • 如果一个方法有多个参数,包含可变参数,可变参数要放在最后

【创建不可变集合】

【构造方法】:

static <E>  List<E>  of(E…elements):创建一个具有指定元素的List集合对象

static <E>  Set<E>  of(E…elements):创建一个具有指定元素的Set集合对象(注:元素不能有重复)

static <K , V>   Map<K,V>  of(E…elements):创建一个具有指定元素的Map集合对象

static <K , V>   Map<K,V>  ofEntries(entry(E…elements)):创建一个利用entry方法将键值对封装成Entry对象再将其添加至Map集合的Map集合对象

例:List<String> list = List.of("a", "b", "c", "d");

       Set<String> set = Set.of("a","b","c");

       Map<String, String> map = Map.of("zhangsan", "江苏", "lisi", "北京", “wangwu”, "天津");

【特点】:

  • 这个集合不能添加,不能删除,不能修改。
  • 但是可以结合集合的带参构造,实现集合的批量添加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lx_Hy_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值