Java数据结构(一)集合框架及背后的数据结构

本文详细解读了Java集合框架的原理、接口Collection和Map的功能,包括Set和List的区别,以及面试中常考的HashMap和ArrayList问题。通过实例演示,深入理解常用集合类的使用和面试准备要点。
摘要由CSDN通过智能技术生成

目录

1.介绍

2.意义

2.1 Java 集合框架的优点及作用

2.2 笔试及面试题

3.接口 interfaces

3.1基本关系说明

3.2 Collection 接口说明

3.3 Collection 常用方法说明

3.4 Colllection 示例

3.5 Map 接口说明

3.6 Map 常用方法说明

3.7 Map 示例

4.实现 classes

5.知识点框架

6.内容总结


本节目标

        
        了解什么是集合框架
        了解学习集合框架的意义
        掌握集合框架相关接口和常见的实现类
        了解下一阶段要学习的内容

1.介绍


Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组 接口 interfaces 和其实现类 classes
其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD
例如,一副扑克牌 ( 一组牌的集合 ) 、一个邮箱 ( 一组邮件的集合 ) 、一个通讯录 ( 一组姓名和电话的映射关系 ) 等等。

2.意义


2.1 Java 集合框架的优点及作用

         使用成熟的集合框架,有助于我们便捷、快速的写出高效、稳定的代码

         学习背后的数据结构知识,有助于我们理解各个集合的优缺点及使用场景

2.2 笔试及面试题

腾讯 - Java 后台开发面经
1. HashMap 了解不,介绍一下,如果一个对象为 key 时, hashCode equals 方法的用法要注意什么?
2. HashSet HashMap 的区别是什么?
3. HashMap 是线程安全的么?那需要线程安全需要用到什么?
阿里巴巴 -Java 后台开发面经
1. ArrayList LinkedList 的区别是什么?
2. 有了解过 HashMap 的具体实现么?
3. HashMap ConcurrentHashMap 哪个效率更高?

3.接口 interfaces

1. Set : 元素不能重复,背后隐含着 查找 / 搜索 的语义
1. SortedSet : 一组有序的不能重复的元素
2. List : 线性结构
3. Queue : 队列
4. Deque : 双端队列

2. Map : 键值对 Key - Value - Pair ,背后隐含着 查找 / 搜索 的语义
1. SortedMap : 一组有序的键值对

3.1基本关系说明

集合层次结构中的根接口。集合表示一组对象,称为其元素。某些集合允许重复元素,而其他集合则不允许。有些是有序的,有些是无序的。JDK 不提供此接口的任何直接实现:它提供了更具体的子接口(如 Set 和 List)的实现。此接口通常用于传递集合,并在需要最大通用性的地方操作它们。

3.2 Collection 接口说明

所有通用的 Collection 实现类(通常通过其子接口之一间接实现 Collection)都应提供两个“标准”构造函数:一个 void(无参数)构造函数(用于创建一个空集合)和一个构造函数,该构造函数具有一个参数,类型为 Collection,它使用与其参数相同的元素创建新集合。实际上,后一个构造函数允许用户复制任何集合,从而生成所需实现类型的等效集合。没有办法强制执行此约定(因为接口不能包含构造函数),但 Java 平台库中的所有通用集合实现都符合要求。

3.3 Collection 常用方法说明

修饰符和类型方法和说明
booleanadd(E e)
确保此集合包含指定的元素(可选操作)。
booleanaddAll(Collection<? extends E> c)
将指定集合中的所有元素添加到此集合(可选操作)。
voidclear()
从此集合中删除所有元素(可选操作)。
booleancontains(Object o)
如果此集合包含指定的元素,则返回 true。
booleancontainsAll(Collection<?> c)
如果此集合包含指定集合中的所有元素,则返回 true。
booleanequals(Object o)
将指定的对象与此集合进行比较以实现相等性。
inthashCode()
返回此集合的哈希代码值。
booleanisEmpty()
如果此集合不包含任何元素,则返回 true。
Iterator<E>iterator()
返回此集合中元素的迭代器。
default Stream<E>parallelStream()
返回与此集合可能并行的集合作为其源。Stream
booleanremove(Object o)
从此集合中删除指定元素的单个实例(如果存在)(可选操作)。
booleanremoveAll(Collection<?> c)
删除此集合的所有元素,这些元素也包含在指定的集合中(可选操作)。
default booleanremoveIf(Predicate<? super E> filter)
删除此集合中满足给定谓词的所有元素。
booleanretainAll(Collection<?> c)
仅保留此集合中包含在指定集合中的元素(可选操作)。
intsize()
返回此集合中元素的数目。
default Spliterator<E>spliterator()
在此集合中的元素上创建拆分器
default Stream<E>stream()
返回以此集合作为其源的顺序。Stream
Object[]toArray()
返回一个数组,其中包含此集合中的所有元素。
<T> T[]toArray(T[] a)
返回一个数组,其中包含此集合中的所有元素;返回数组的运行时类型是指定数组的运行时类型。

3.4 Colllection 示例

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 星有野
 * Date: 2022-05-05
 * Time: 12:44
 */
import java.util.Collection;
import java.util.ArrayList;
import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
        Collection<String> List = new ArrayList<>();
        System.out.println(List.size());
        System.out.println(List.isEmpty());
        List.add("我");
        List.add("爱");
        List.add("皮皮");
        System.out.println(List.size());
        System.out.println(List.isEmpty());
        Object[] array = List.toArray();
        System.out.println(Arrays.toString(array));
        for (String s : List) {
            System.out.println(s);
        }
        List.remove("爱");
        for (String s : List) {
            System.out.println(s);
        }
        List.clear();
        System.out.println(List.size());
        System.out.println(List.isEmpty());

    }



}



 

3.5 Map 接口说明

Map (Java Platform SE 8 ) (oracle.com)

3.6 Map 常用方法说明

修饰符和类型方法和说明
voidclear()
从此映射中删除所有映射(可选操作)。
default Vcompute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
尝试计算指定键及其当前映射值的映射(如果没有当前映射)。null
default VcomputeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
如果指定的键尚未与某个值关联(或映射到 ),则尝试使用给定的映射函数计算其值并将其输入到此映射中,除非 。nullnull
default VcomputeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
如果指定键的值存在且不为 null,则尝试在给定键及其当前映射值的情况下计算新的映射。
booleancontainsKey(Object key)
如果此映射包含指定键的映射,则返回 true。
booleancontainsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
Set<Map.Entry<K,V>>entrySet()
返回此映射中包含的映射的 Set 视图。
booleanequals(Object o)
将指定的对象与此映射进行比较以获得相等性。
default voidforEach(BiConsumer<? super K,? super V> action)
对此映射中的每个条目执行给定的操作,直到所有条目都已处理完毕或该操作引发异常。
Vget(Object key)
返回指定键映射到的值,或者如果此映射不包含键的映射。null
default VgetOrDefault(Object key, V defaultValue)
返回指定键映射到的值,或者如果此映射不包含键的映射。defaultValue
inthashCode()
返回此映射的哈希代码值。
booleanisEmpty()
如果此映射不包含键值映射,则返回 true。
Set<K>keySet()
返回此映射中包含的键的 Set 视图。
default Vmerge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
如果指定的键尚未与某个值关联或与 null 相关联,请将其与给定的非空值相关联。
Vput(K key, V value)
将指定的值与此映射中的指定键相关联(可选操作)。
voidputAll(Map<? extends K,? extends V> m)
将所有映射从指定映射复制到此映射(可选操作)。
default VputIfAbsent(K key, V value)
如果指定的键尚未与某个值关联(或映射到),则将其与给定值相关联并返回 ,else 返回当前值。nullnull
Vremove(Object key)
从此映射中删除键的映射(如果存在)(可选操作)。
default booleanremove(Object key, Object value)
仅当指定键当前映射到指定值时,才删除该项的条目。
default Vreplace(K key, V value)
仅当指定键当前映射到某个值时,才替换该项的条目。
default booleanreplace(K key, V oldValue, V newValue)
仅当当前映射到指定值时,才替换指定键的条目。
default voidreplaceAll(BiFunction<? super K,? super V,? extends V> function)
将每个条目的值替换为在该条目上调用给定函数的结果,直到所有条目都已处理完毕或函数引发异常。
intsize()
返回此映射中键值映射的数目。
Collection<V>values()
返回此映射中包含的值的“集合”视图。

3.7 Map 示例



public class TestDemo {

    public static void main(String[] args) {
        TreeMap<String,String> map2 = new TreeMap<>();
        map2.put("索尼","佳能");
        map2.put("女神","皮皮");
        System.out.println(map2);

        HashMap<String,String> map = new HashMap<>();
        map.put("索尼","佳能");
        map.put("女神","皮皮");
        System.out.println(map);
    }

    public static void main4(String[] args) {
        Map<String,String> map = new HashMap<>();
        map.put("索尼","佳能");
        map.put("女神","皮皮");
        System.out.println(map);
        System.out.println("====================");

        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        for( Map.Entry<String, String> entry : entrySet) {
            System.out.println("key: "+entry.getKey()+" value:"+entry.getValue());
        }

    }
    public static void main3(String[] args) {

        Map<String,String> map = new HashMap<>();
        map.put("女神","皮皮");
        map.put("索尼","佳能");

        String ret = map.getOrDefault("索尼","佳能");
        System.out.println(ret);
        boolean flg = map.containsKey("女神2");
        System.out.println(flg);

        Map<String,String> map2 = new TreeMap<>();

    }
    public static void main2(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("hello");
        collection.add("hello2");
        //System.out.println(collection);
        Object[] objects = collection.toArray();
        System.out.println(Arrays.toString(objects));
        /*collection.clear();
        System.out.println("===================");
        System.out.println(collection);
        System.out.println(collection.isEmpty());*/
    }

    public static void main1(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("hello");
        collection.add("hello2");
        //collection.add(1);
        //尖括号当中 放的类型 一定要是 类类型 不能是简单的基本类型
        Collection<Integer> collection2 = new ArrayList<>();
        collection2.add(1);
        collection2.add(2);
        collection2.add(13);

    }
}


4.实现 classes


interface顺序表链表红黑树哈希表
SetTreeSetHashSet
ListArrayListLinkedList
QueueLinkedListpriorityQueue
DequeLinkedList
MapTreeMapHashMap

5.知识点框架


1. 集合框架的使用
1. Collection
2. List
3. ArrayList
4. LinkedList
5. Stack
6. Queue
7. PriorityQueue
8. Deque
9. Set
10. HashSet
11. TreeSet
12. Map
13. HashMap
14. TreeMap
15. Collections

6.内容总结


Java 集合框架中接口、之间的关系及其含义
Java 集合框架中接口和其各自对应的常见实现类之间的关系
下一阶段的主要课程内容

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值