Java - 常见数据结构

in TCEHJava with 0 comment

什么是数据结构

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,亦是计算机存储,组织数据的方式;

通常情况下,每种数据结构均有其特定的使用场景数据结构,可带来更高效的运行或存储效率;

数据结构往往同高效的检索算法和索引技术有关;

数据结构的基本功能

同数据库类似,同样有 增(Create) 删(Delete) 改(Update) 查(Retrieve),简写:CURD

常见数据结构

  1. 数组(Array)
  2. 映射(Map)
  3. 队列(Queue)
  4. 栈(Stack)
  5. 链表(LinkedList)
  6. 哈希表(HashTable)
  7. 树(tree)
  8. 字典(Dictionary)

数组(Array)

数组(array)是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来确定数组中唯一的元素。根据数组的维度,可以将其分为一维数组、二维数组和多维数组等,大白话来说就类似洋葱,一层一层包裹在一起,最外层就是一维数组。

例子:

        //定义并实例化数组
        int[] num1 = {1,2};
        int[][] num2 = {{1,2},{3,4}};
        int[][][] num3 = {{{1,2},{3,4}}};
        int[][][][] num4 = {
                {
                    {
                        {0},{1}
                    },{
                        {2},{3}
                    }
                },{
                    {
                        {4},{5}
                    },{

                    }

                },{

                }
        };
        //遍历四维数组
        for (int i = 0; i < num4.length; i++) {
            for (int j = 0; j < num4[i].length; j++) {
                for (int j2 = 0; j2 < num4[i][j].length; j2++) {
                    for (int k = 0; k < num4[i][j][j2].length; k++) {
                        System.out.println("下标="+i+"-"+j+"-"+j2+"-"+k +" || 值="+num4[i][j][j2][k]);
                }
                }
            }
        }
        //输出结果
        //下标=0-0-0-0 || 值=0
        //下标=0-0-1-0 || 值=1
        //下标=0-1-0-0 || 值=2
        //下标=0-1-1-0 || 值=3
        //下标=1-0-0-0 || 值=4
        //下标=1-0-1-0 || 值=5
        //由此可以得出,多维数组本质就是一层嵌套二层,二层嵌套三层,以此类推

Map<K,V>

键-值映射的接口。且不能包含重复的键,键-值成一对一的关系。
包含方法:

以下是JDK1.8新加的特性,即接口可以有默认实现方法

鉴于新特性可能不太容易理解。附示例代码如下:

        //需要修改 Language level 为 Lambdas
        Map<String, String> map = new HashMap();
        map.put("a", "1");
        Map<String, String> map2 = new HashMap();
        map2.put("b", "2");
        map.putAll(map2);

        String c = map.getOrDefault("d", "c");
        BiConsumer<String, String> biConsumer = (String s, String s2) -> System.out.println(s + ":" + s2);
        BiFunction<String, String, String> biFunction = (String s, String s2) -> 2 + s2;
        Function<String, String> function = (String s) -> "aa";
        BiFunction<String, String, String> biFunction2 = (String s, String s2) -> "222";
        BiFunction<String, String, String> biFunction3 = (String s, String s2) -> null;
        BiFunction<String, String, String> biFunction4 = (String s, String s2) -> "aa";
        //map.forEach(biConsumer);
        //map.replaceAll(biFunction);
        //map.computeIfAbsent("aa",function);
        //map.computeIfPresent("a",biFunction2);
        //map.compute("a",biFunction3);
        map.merge("c","xxx2",biFunction4);

        System.out.println(map.toString());

常用实现类有HashMap、Hashtable、TreeMap、ConcurrentHashMap、LinkedHashMap。可点击,查阅源码分析,可知晓其实现流程。

队列(Queue)

一种特殊的线性表,它只允许在表头部进行删除操作,只允许在表尾部进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。

通常每个元素总是从队列的尾部进入队列,然后等待该元素之前的所有元素出队之后,当前元素才能出队,遵循先进先出(FIFO)原则。

Comments are closed.