Java18-java语法基础——集合框架

一、什么是集合框架

1、集合框架:是为表示和操作集合而规定的一种统一的、标准的体系结构。

2、任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。

(1)接口:即表示集合的抽象数据类型。接口提供了让我们对集合中所表示的内容进行单独操作的可能。

(2)实现:也就是集合框架中接口的具体实现。实际它们就是那些可复用的数据结构。

(3)算法:在一个实现了某个集合框架中的接口的对象上,完成某种有用的计算的方法,例如查找、排序等。

二、集合框架的好处

1、提高程序设计效率。

2、提高程序速度和质量。集合框架通过提供对有用的数据结构和算法的高性能和高质量的实现使你的程序速度和质量得到提高。

3、集合框架鼓励软件的复用。对于遵照标准集合框架接口的新的数据结构是可复用的。

三、Java集合框架包含的内容

接口

collection

Map

List

set

接口特点

元素可以重复,有序的(插入顺序有序),长度可变

元素不可以重复,无序的

无序的,以key-value的方式存放数据

具体类

ArrayList

LinkedList

HashSet

TreeSet

HashMap

TreeMap

动态数组,底层由数组实现

动态链表,底层由链表实现

优缺点

遍历和随机访问效率高

插入删除效率高

常用方法

1)put(key,value)

2)keySet()

3)values()

算法

1、Collections提供了对集合进行排序、遍历等多种算法实现;

2、Java集合框架为我们提供了一套性能优良、使用方便的接口和类,它们位于java.util包中;

3、我们不必再重新发明轮子,只需学会如何使用它们,就可处理实际应用中问题。

四、List接口的实现类:ArrayList、LinkedList

1、ArrayList类

(1)定义:

  ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。

  

(2)常用方法(继承List接口)

方法名

   

boolean add(Object o)

在列表的末尾顺序添加元素,起始索引位置从0开始

void add(int index,Object o)

在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间

int size()

返回列表中的元素个数

Object get(int index)

返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换

boolean contains(Object o)

判断列表中是否存在指定元素

boolean remove(Object o)

从列表中删除元素

Object remove(int index)

从列表中删除指定位置元素,起始索引位置从0开始

2、LinkedList类

(1)定义:LinkedList采用链表存储方式。插入、删除元素时效率比较高。

  

(2)LinkedList集合类的特殊方法

方法名

   

void  addFirst(Object o)

在列表的首部添加元素

void  addLast(Object o)

在列表的末尾添加元素

Object getFirst()

返回列表中的第一个元素

Object getLast()

返回列表中的最后一个元素

Object removeFirst()

删除并返回列表中的第一个元素

Object removeLast()

删除并返回列表中的最后一个元素

五、Map接口

  Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作。

  最常用的是HashMap。

实现类HashMap

(1)定义:

    Map countries = new HashMap();

(2)常用方法:

方法名

   

Object put(Object key, Object val)

以“键-值对”的方式进行存储

Object get (Object key)

根据键返回相关联的值,如果不存在指定的键,返回null

Object remove (Object key)

删除由指定的键映射的“键-值对”

int size()

返回元素个数

Set keySet ()

返回键的集合

Collection values ()

返回值的集合

boolean  containsKey (Object key)

如果存在由指定的键映射的“键-值对”,返回true

六、集合类对比

1、Vector和ArrayList的异同

  实现原理相同,功能相同,很多情况下可以互用

  两者的主要区别如下:

  (1)Vector线程安全,ArrayList重速度轻安全,线程非安全;

  (2)长度需增长时,Vector默认增长一倍,ArrayList增长50%。

2、Hashtable和HashMap的异同

  实现原理相同,功能相同,在很多情况下可以互用

  两者的主要区别如下:

  (1)Hashtable继承Dictionary类,HashMap实现Map接口

  (2)Hashtable线程安全,HashMap线程非安全

  (3)Hashtable不允许null值,HashMap允许null值

七、迭代器:遍历List集合

  方法1:通过for循环和get()方法配合实现遍历

  方法2:通过迭代器Iterator实现遍历

  所有集合接口和类都没有提供相应遍历方法,而是由Iterator实现集合遍历;

  Collection 接口的iterate()方法返回一个Iterator,然后通过Iterator接口的两个方法可实现遍历;

迭代器的两个方法:

    boolean hasNext(): 判断是否存在另一个可访问的元素

    Object next(): 返回要访问的下一个元素

示例:

//定义Student对象stu的迭代器it
Iterator<Student> it = stu.iterator();
while(it.hasNext()){ //判断迭代器中是否还有下一个元素
Student temp = it.next(); //获取下一个元素
System.out.println(temp); //输出
}

八、泛型集合

Java18-java语法基础——集合框架的更多相关文章

  1. Java中的集合框架(上)

    Java中的集合框架概述 集合的概念: Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象. 集合的作用: 1.在类的内部,对数据进行组织: 2.简单的快速的搜索大数据量的 ...

  2. Java语法基础(1)

    Java语法基础(1) 1.      Java是一门跨平台(也就是跨操作系统)语言,其跨平台的本质是借助java虚拟机 (也就是JVM(java virtual mechinal))进行跨平台使用. ...

  3. 菜鸟日记之 java中的集合框架

    java中的集合框架图 如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合 Collection单列集合:继承了Iterat ...

  4. 第51节:Java当中的集合框架Map

    简书作者:达叔小生 Java当中的集合框架Map 01 Map提供了三个集合视图: 键集 值集 键-值 映射集 public String getWeek(int num){ if(num<0 ...

  5. 第48节:Java当中的集合框架

    Java当中的集合框架 01 在我们班里有50位同学,就有50位对象. // 简书作者:达叔小生 Student[] stus = new Student[20]; 结果来了一位插班生,该同学因为觉得 ...

  6. Java中的集合框架-Collections和Arrays

    上一篇<Java中的集合框架-Map>把集合框架中的键值对容器Map中常用的知识记录了一下,本节记录一下集合框架的两个工具类Collections和Arrays 一,Collections ...

  7. Java中的集合框架-Map

    前两篇<Java中的集合框架-Commection(一)>和<Java中的集合框架-Commection(二)>把集合框架中的Collection开发常用知识点作了一下记录,从 ...

  8. Java中的集合框架-Collection(二)

    上一篇<Java中的集合框架-Collection(一)>把Java集合框架中的Collection与List及其常用实现类的功能大致记录了一下,本篇接着记录Collection的另一个子 ...

  9. Java当中的集合框架Map

    简书作者:达叔小生 Java当中的集合框架Map 01 Map提供了三个集合视图: 键集 值集 键-值 映射集 public String getWeek(int num){ if(num<0 ...

随机推荐

  1. js实现表单

      <html>   <head>   <title>表单页面</title>   <meta http-equiv="Content- ...

  2. tomcat接口调用时延开关

    项目中有些页面时延不稳定,需要看每次接口调用时延,怎么看,有两种方法:一种是直接去catalina.out日志中看,一种是直接去localhost_access_log日志中看,第一种需要在代码中实现 ...

  3. AR外包,就找北京动点软件,长年承接AR外包(案例丰富可签合同,内附案例演示)

    北京团队长年承接AR项目外包 咨询QQ:372900288  微信:liuxiang0884 以下是AR项目案例演示,索取更多案例请通过以上方式在线联系我们

  4. C# 代码小技巧

    一 .自动属性. 1.vs下输入prop,Tab键就出现了.   2.有了自动属性,我们不用再额外为一个类的每个公共属性定义一个私有字段(实际上没多大用处的字段), 但是通过反射还是可以看到对应的私有 ...

  5. 在内存中加载DLL

    有个需求是把一个DLL作为数据打包到EXE中,运行的时候动态加载.但要求不是释放出来生成DLL文件加载. 花了一天时间做出来.效果还可以. 不过由于是直接分配内存加载DLL的.有一些小缺陷.例如遍历进 ...

  6. Maya中提交Nuke工程到deadline中的方法

    在之前的一篇文中介绍了在maya中生成nuke工程脚本的方法,后来部门负责人希望更简单一些,能在那个功能面板里提交deadline农场渲染更好,这样就不用打开nuke手动提交了,省去了在两个软件直接来 ...

  7. VUE中如何优雅的动态绑定长按事件

    答案没有: 图片是从后端传过来, 加到imgTarget属性,实现长按点击删除该图片 let img = document.createElement('img'); img.src = " ...

  8. JS高级-异步

    单线程 只有一个线程,同一时间只能做一件事 原因:避免DOM渲染的冲突 浏览器需要渲染DOM JS可以修改DOM结果 JS执行的时候,浏览器DOM渲染会暂停 两段JS也不能同时执行(修改DOM就冲突) ...

  9. 200用户的并发用户配置(CSV)

    我来解释一下为什么标题是,设置多个参数对浏览器进行访问,原本想写成对app或者web,但是我想只要有参数的地方无聊是app或者web或者小程序,都是可以用到设置参数的. 第一步:在线程组下添加参数配置 ...

  10. Axiso解决跨域访问(...XMLHttpRequest cannot load http://xxx.xxx No 'Access-Control-Allow-Origin'...)

    直接访问如下:this.$axios.get("http://localhost:8089/yc/demo").then(res=>{    console.log(res) ...