集合与框架

简介: 集合与框架

引言



Java 集合框架,又被称为容器,是定义在 java.util 包下的一组接口和它的实现类。

其主要作用是可以将多个元素置于一个单元中,用于对这些元素进行即平时我们增删查改。


一、类和接口总览



19bcd86f3e9b4096a5b443b1522435a4.png



其中 Iterable 是一个接口,表示实现该接口的类是可以逐个元素进行遍历的。


cf468af86b734b1798f485d15e4fedeb.png


Collection 也是一个接口,该接口中规范了后序集合框架中常用的一些方法


ee6de6d66d15492e96ad33312eaf847b.png


至于后续的一些接口和实现类,小伙伴可以自己去 IDEA 编译器中查看。后面会提到怎么操作来查看这些方法。


二、集合框架的重要性




  • 使用成熟的集合框架,有助于我们便捷、快速的写出高效、稳定的代码
  • 学习背后的数据结构知识,有助于我们理解各个集合的优缺点及使用场景


三、集合框架后的集合类



  1. Collection:一个接口,包含了大部分集合框架中常用的一些方法。
  2. List:是一个接口,规范了ArrayList 和 LinkedList中要实现的方法。

ArrayList:实现了List接口,底层为动态类型顺序表

LinkedList:实现了List接口,底层为双向链表

  1. Stack:底层是栈,栈是一种特殊的顺序表。
  2. Queue:底层是队列,队列是一种特殊的顺序表。
  3. Deque:双端队列。
  4. Set:集合,是一个接口,里面放置的是 K 模型。


HashSet:底层为哈希桶,查询的时间复杂度为O(1)
TreeSet:底层为红黑树,查询的时间复杂度为O( log2N ), key 是有序的


  1. Map:映射,里面存储的是 K-V 模型的键值对。


HashMap:底层为哈希桶,查询时间复杂度为O(1)

TreeMap:底层为红黑树,查询的时间复杂度为O( log2N ), key 是有序的


四、Collection 接口



在 IDEA 编译器中,我们点击左下角 Structure,或者使用快捷键 [ Alt + 7 ],即可找到对应的接口或类的方法。


b1df54382b6a4a19806163ee976306ca.png


程序清单1:


public class Test1 {
    public static void main(String[] args) {
        Collection<String> collection= new ArrayList<String>();
        collection.add("hello");
        collection.add("world");
        System.out.println(collection);
        collection.clear();
        System.out.println(collection);
        System.out.println(collection.isEmpty());
    }
}


输出结果:


02db9b294fa7424bac0cdc8be67fff60.png


程序清单2:

public class Test2 {
    public static void main(String[] args) {
        Collection<String> collection= new ArrayList<String>();
        collection.add("hello");
        collection.add("world");
        System.out.println(collection);
        System.out.println("---------------");
        Object[] objects = collection.toArray();
        System.out.println(Arrays.toString(objects));
    }
}


输出结果:


02db9b294fa7424bac0cdc8be67fff60.png


五、包装类



48166df8ceb0491388b8641634e2329f.png


程序清单3:


public class Test3 {
    public static void main(String[] args) {
        String str = "123";
        int ret = Integer.valueOf(str);
        System.out.println(ret + 1);
    }
}


输出结果:


c7d4ac26f9b44e66a8fb55575d764a58.png


装箱操作


新建一个 Integer 类型对象,将输入参数的值放入对象的某个属性当中。


拆箱操作


将 Integer 对象中的值取出,放到一个基本数据类型中。


例子1


程序清单4:


public class Test4 {
    public static void main(String[] args) {
        Integer a1 = 123; //隐式装箱
        int b1 = a1; //隐式拆箱
        System.out.println(a1 + b1);
        System.out.println("------------");
        Integer a2 = Integer.valueOf(123);
        Integer a3 = new Integer(123);
        //上面两行代码都是显示装箱操作
        int b2 = a2.intValue();
        Double c2 = a2.doubleValue();
        //上面两行代码都是显示拆箱操作
        System.out.println(a2);
        System.out.println(a3);
        System.out.println(b2);
    }
}


输出结果:


68c11a29dcdf468e87359aaa4a424b56.png


例子2


程序清单5:


public class Test5 {
    public static void main(String[] args) {
        Integer a1 = 123;
        Integer b1 = 123;
        System.out.println(a1 == b1);
        Integer a2 = 129;
        Integer b2 = 129;
        System.out.println(a2 == b2);
    }
}


输出结果:


de3281caf05e49c59a116bfee1e72fb7.pngf7db377053894e119a65d2f98cd43283.png



在源代码中,我们发现 cache 数组返回值是有范围限制的,而这个范围限制和 i 有很大关联,当我们取得的值在数组范围内,我们就存储,当不在数组范围内,我们就返回并创建一个新的对象。那么我们现在对这个 cache 数组进行分析。


由上面的图可以发现,边界 low = -128,high = 127

那么对应的区间即为 [ -128, 127 ],我们将两边区间代入数组,就像高等数学中,我们知道定义域,往函数式一带,就能求出值域。


//数组 cache
cache[i + (-IntegerCache.low)


当 i = -128,cache[ 0 ]

当 i = 127,cache[ 255 ]


那么我们模拟数组内部的结果就如下图所示:数组的长度为256,cache[ 0 ] = -128,cache[ 255 ] = 127.


5a1e2feb3cba45d5a80344490827fab0.png


经过上面的分析之后,我们再回过头看程序清单中对应的代码:


Integer a2 = 129;
Integer b2 = 129;
System.out.println(a2 == b2);


129 > 127,很明显,这已经不在数组范围之内了,那么系统就会产生新的对象,这样导致的结果就是两者拿到的地址不同,所以输出 false.


目录
相关文章
框架集合之Map集合
框架集合之Map集合
81 0
|
1月前
|
Java 容器
集合简介
java集合可分为Set、List、Queue和Map四种体系。 set代表无序、不可重复的集合 List代表有序、重复的集合 而Map则代表具有映射关系的集合 Queue代表一种队列集合实现 Java集合就像是一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)“丢进”该容器中。从Java5 增加了泛型以后,Java集合可以记住容器中对象的数据类型,使得编码更加简洁、健壮。
|
6月前
|
索引
10.30-11.5每周学习小结(31日)(有关集合的小结)
10.30-11.5每周学习小结(31日)(有关集合的小结)
|
6月前
|
Java 索引 容器
JavaSE——集合框架一(1/7)-集合体系概述(集合体系结构,Collection集合体系)、Collection的常用方法(介绍,实例演示,代码)
JavaSE——集合框架一(1/7)-集合体系概述(集合体系结构,Collection集合体系)、Collection的常用方法(介绍,实例演示,代码)
52 0
|
7月前
|
存储 安全 Java
集合技术文章
集合技术文章
|
7月前
|
存储 安全 算法
|
存储 Java 索引
深入了解java集合框架-List集合以及选用
List List实现了Collection,所以他拥有Collection的全部方法
|
机器学习/深度学习 数据可视化 安全
【晴川先锋队】六个项目集合
宁德核电python大赛晴川先锋队作品展示
306 0
【晴川先锋队】六个项目集合
数据结构84-集合常见操作之子集代码
数据结构84-集合常见操作之子集代码
59 0
|
Scala 开发者 ice
集合扁平化操作 | 学习笔记
快速学习集合扁平化操作