Java集合篇(简洁版)

Java集合篇

Java集合体系框架

在这里插入图片描述

Java 集合框架主要包括两种类型的容器,一种是Collection(单列集合),另一种是Map(双列集合),存储键/值对映射。Collection 接口又有 3 种子类型,List、 Set 和 Queue,再下面是一些抽象类,最后是具体实现类,如 ArrayListLinkedListHashSet、LinkedHashSet、HashMap、LinkedHashMap 等。

Collection集合

Collection集合架构
在这里插入图片描述

Collection集合是单例集合的顶层接口,JDK提供啦更具体的三个子接口:

  • List:有序集合(元素存入集合的顺序和取出的顺序一致),元素可以重复可以插入多个null元素,元素都有索引。常用的实现类有 ArrayList、LinkedList 和 Vector。
  • Set:无序集合(存入和取出顺序有可能不一致),不可以存储重复元素,只允许存入一个null元素,必须保证元素唯一性。Set 接口常用实现类是 HashSet、LinkedHashSet 以及 TreeSet。
  • Queue/Deque:是 Java 提供的标准队列结构的实现,除了集合的基本功能,它还支持类似先入先出(FIFO, First-in-First-Out)或者后入先出(LIFO,Last-In-First-Out)等特定行为。常用实现类有ArrayDeque、ArrayBlockingQueue、LinkedBlockingDeque

Collection集合的常用方法:

boolean add(E e)
boolean addAll(Collection<? extends E>)
boolean remove(Object o)
boolean removeIf(Object o)
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()
iterator()
toArray()
toArray(T[])

List集合

List集合特点:元素有放入顺序,元素可重复,支持索引。可以使用迭代器、增强for、普通for循环遍历

List集合特有方法:

void add(int index,E element)       //在此集合中的指定位置插入指定的元素
E remove(int index)            //删除指定索引处的元素,返回被删除的元素
E set(int index,E element)        //修改指定索引处的元素,返回被修改的元素
E get(int index)             //返回指定索引处的元素
ArrayList
  • 底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素

特有方法:

public boolean add(要添加的元素)        //将指定的元素追加到此集合的末尾
public boolean remove(要删除的元素)         //删除指定元素,返回值表示是否删除成功
public E remove(int index)          // 删除指定索引处的元素,返回被删除的元素
public E set(int index,E element)       //修改指定索引处的元素,返回被修改的元素
public E get(int index)       //返回指定索引处的元素
public int size()
LinkedList
  • 底层数据结构是双向链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素

特有方法:

public void addFirst(E e)       //在该列表开头插入指定的元素
public void addLast(E e)         //将指定的元素追加到此列表的末尾
public E getFirst()         //返回此列表中的第一个元素
public E getLast()         //返回此列表中的最后一个元素
public E removeFirst()        //从此列表中删除并返回第一个元素
public E removeLast()        //从此列表中删除并返回最后一个元素
Vector
  • 底层数据结构是数组,查询快,增删慢,方法被synchronized修饰线程安全,效率低,可以存储重复元素
List集合遍历方式
  1. 普通遍历:for(int i=0; i< arrays.size(); i++)
  2. 增强for遍历:for(String str : arrays)
  3. list.forEach((str) -> xxxxx)
  4. 使用Iterator迭代器遍历

Set集合

Set集合特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉。(元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法)。Set无序,不支持索引,所以只能使用迭代器、增强for遍历

TreeSet
  • TreeSet底层是二叉树来实现
  • 依赖hashCode方法和equals方法保证键的唯一
  • 根据构造方法不同,分为自然排序(无参构造)和比较器排序(有参构造),自然排序要求元素必须实现Compareable接口,并重写里面的compareTo()方法,元素通过比较返回的int值来判断排序序列,返回0说明两个对象相同,不需要存储;比较器排需要在TreeSet初始化是时候传入一个实现Comparator接口的比较器对象,或者采用匿名内部类的方式new一个Comparator对象,重写里面的compare()方法
HashSet
  • HashSet底层是哈希表(HashMap)实现,元素不可重复且无序,线程不安全
  • HashSet是为了优化查询速度而设计的Set,允许存放null值。
  • 元素需要重写hashCode方法和equals方法保证键的唯一
LinkedHashSet
  • 底层数据结构采用链表和哈希表共同实现,元素顺序与存储顺序一致
  • 元素不可重复,可以存储null值,线程不安全,效率高
set集合遍历方式
  1. 增强for遍历:for(String str : arrays)
  2. set.forEach((str) -> xxxxx)
  3. 使用Iterator迭代器遍历
  4. 使用toArray(),转换成一个数组,对数组进行遍历

Map集合架构

Map集合架构

在这里插入图片描述

Map集合常用方法:

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 keySet()          //获取所有键的集合
Collection values()           //获取所有值的集合
Set<Map.Entry<K,V>> entrySet()        //获取所有键值对对象的集合

HashMap

  • HashMap底层是哈希表结构的
  • 依赖hashCode方法和equals方法保证键的唯一
  • 如果键要存储的是自定义对象,需要重写hashCode和equals方法

HashTable

  • Hashtable 使用方法基本上和 HashMap 一样
  • Hashtable 的键和值都不能为 null,否则会抛出NullPointerException
  • Hashtable 是线程安全的(synchronized)

TreeMap

  • TreeMap底层是红黑树结构
  • 依赖自然排序或者比较器排序,对键进行排序
  • 如果键存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时候给出比较器排序规则总结:

Map集合遍历

方式一:键找值

// 1、获取Map集合的全部键
 Set<String> keys = map.keySet();
 
// 2、遍历全部的键,根据键获取其对应的值
 for (String key : keys) {
    // 根据键获取对应的值
     double value = map.get(key);
     System.out.println(key + "=====>" + value);
 }

方式二:键值对

 // 1、调用Map集合提供entrySet方法,把Map集合转换成键值对类型的Set集合
  Set<Map.Entry<String, Double>> entries = map.entrySet();
  for (Map.Entry<String, Double> entry : entries) {
        String key = entry.getKey();
        double value = entry.getValue();
        System.out.println(key + "---->" + value);
  }

 方式三:forEach

//遍历map集合,传递Lambda表达式
map.forEach(( k,  v) -> {
  System.out.println(k + "---->" + v);
});

总结: 

 在开发中,集合类型选择:
1)先判断存储的类型(一组对象或一组键值对)
2) 一组对象:Collection接口
        允许重复:List
                增删多:LinkedList 
                改查多:Arraylist
                不允许重复: Set
                无序:Hashset
                排序:TreeSet
                插入和取出顺序一致:LinkedHashSet
3) 一组键值对:Map接口
                键无序:HashMap
                键排序:TreeMap
                鍵插入和取出順序一致: LinkedHashMap
                读取文件 Properties  

Collections工具类 

Collections 是 JDK 提供的一个工具类,位于 java.util 包下,提供了一系列的静态方法,方便我们对集合进行各种操作。

1.排序操作

  • reverse(List list):反转顺序
  • shuffle(List list):洗牌,将顺序打乱
  • sort(List list):自然升序
  • sort(List list, Comparator c):按照自定义的比较器排序
  • swap(List list, int i, int j):将 i 和 j 位置的元素交换位置

2.查找操作

  • binarySearch(List list, Object key):二分查找法,前提是 List 已经排序过了
  • max(Collection coll):返回最大元素
  • max(Collection coll, Comparator comp):根据自定义比较器,返回最大元素
  • min(Collection coll):返回最小元素
  • min(Collection coll, Comparator comp):根据自定义比较器,返回最小元素
  • fill(List list, Object obj):使用指定对象填充
  • frequency(Collection c, Object o):返回指定对象出现的次数

3.同步控制:Collections 工具类中提供了多个 synchronizedXxx 方法,这些方法会返回一个同步的对象,从而解决多线程中访问集合时的安全问题。  

4.不可变集合

  • emptyXxx():制造一个空的不可变集合
  • singletonXxx():制造一个只有一个元素的不可变集合
  • unmodifiableXxx():为指定集合制作一个不可变集合
  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值