首页 > 编程语言 >Java高级架构师-Java基础(集合)

Java高级架构师-Java基础(集合)

时间:2022-11-03 09:36:17浏览次数:72  
标签:Java 映射 -- 元素 collection 集合 架构师 排序

Java高级架构师-Java基础(集合)

集合框架

7ce1756ea8492e0e5fdd1143984a9b3d.png

Java.util.Collection

Collection接口中的共性功能

1.添加

booblean add(Object obj); 往该集合中添加元素,一次添加一个

boolean addAll(Collection c); 将指定 collection 中的所有元素都添加到此 collection 中

2.删除

void clear(); 移除此 collection 中的所有元素

boolean remove(Object o); 从此 collection 中移除指定元素的单个实例,如果存在的话

boolean removeAll(Collection e); 移除此 collection 中那些也包含在指定 collection 中的所有元素

3.获取

int size(); 返回此 collection 中的元素数。

4.判断

boolean isEmpty();

boolean contains(Object o); 如果此 collection 包含指定的元素,则返回 true。

boolean containsAll(Collection c); 如果此 collection 包含指定 collection 中的所有元素,则返回 true。

5.将集合转成数组

toArray(); 返回包含此 collection 中所有元素的数组。

toArray(T[ ] a); 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

6.取出集合元素

Iterator iterator(); 获取集合中元素上迭代功能的迭代器对象;

返回在此 collection 的元素上进行迭代的迭代器。

迭代:取出元素的一种方式;

迭代器:具备着迭代功能的对象;

而迭代器对象不需要new,直接通过iterator()方法获取即可,迭代器是取出Collection集合中元素的公共方法.

Collection

|--List:有序(存入的顺序和取出的顺序一致)有索引,允许重复元素

|--Set:不允许重复元素

重点List接口中的特有方法:它的特有方法都是围绕索引定义的.List支持增删改查;

1.增

add(index,element);

2.删

remove(index);

3.改

set(index,new element);

4.查

int indexOf(element);

element get(index);

List集合的具体子类;子类之所以区分是因为内部的数据接口(存储数据的方式)不同。

JDK1.0 |--Vector:数据结构是数组;数组是可变长度的(不断new新数组并将原数组元素复制到新数组),线程是同步的,增删和查询都比较慢。

JDK1.2 |--ArrayList:也是数组结构,也是长度可变的。线程不同步的,替代了Vector增删速度不快,查询速度很快。

|--LinkedList:链表结构,线程不同步的。增删速度很快,查询速度较慢。

LinkedLisgt的特特殊方法:

1.增加元素

addFirst(E e);将指定元素插入此列表的开头。

addLast(E e):将指定元素添加到此列表的结尾。

2.获取元素

getFirst();返回此列表的第一个元素。

getLast();返回此列表的最后一个元素。

3.删除元素

removeFirst();移除并返回此列表的第一个元素。

removeLast(); 移除并返回此列表的最后一个元素。

Set集合:不允许重复元素;和Collection的方法相同;Set集合取出方法只有一个:迭代器

|--HashSet:哈希(散列)表结构

|--LinkedHashSet:哈希表+链表结构。可以实现有序

此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

如何保持元素唯一性?

元素必须覆盖hashCode()和equals()方法;

hashCode()方法是为了根据元素自身的特点确定哈希值;覆盖equals()方法是为了解决哈希值的冲突(只有hashCode()方法一致时在需要equals()方法)。

|--TreeSet:可以对元素进行排序;不同步的,二叉树数据结构

排序方式一:需要元素具备比较功能.所以元素需要实现Comparable接口,覆盖CompareTo方法

如何保证元素唯一性?

参考的就是比较方法的返回值是否为0;是,则是重复元素,不进行存储。

需求中也有这样的一种情况,元素具备的比较功能不是所需要的,也就是说不想按照自然排序的方法,而是按照自定义的排序方式,对元素进行排序。

而且,存储到TreeSet中的元素万一没有比较功能,该如何排序呢?

排序方式二:实现Comparator接口覆盖Compare()方法。将Comparator接口的对象,作为参数传递给TreeSet集合的构造函数。

比较器较为灵活,自然排序通常作为元素的默认排序,一般不建议改动,要想自定义排序方法,推荐排序方式二。

集合技巧:

JDK1.2以后出现的集合框架中的常用子类对象,存在的规律。前缀名是数据结构名,后缀名是所属体系名

|--List

ArrayList:数组结构;看到数组结构,就需要知道 查询快,看到List就知道可以重复,可以增删改查。

LinkedList:链表结构,增删快。特有方法:xxxFirst xxxLast addxxx getxxx removexxx

|--Set

HashSet:哈希表,查询速度更快,一看到这个就需要想到元素必须覆盖hashCode()方法和equals()方法。不保证有序,看到Set,就需要知道元素不可以重复。

LinkedHashSet:链表+哈希表。因为由链表,所以可以实现有序。

TreeSet:二叉树,可以排序。一看到这个集合要想到两种比较方式: (1)一种是自然排序Comparable (2)一种是自定义比较器 Comparator

Map集合:双列集合,一次存储一对,键值对;要保证键的唯一性,重复键会覆盖前面键的值。

共性的功能

1.添加

V put(K key ,V value); 将指定的值与此映射中的指定键关联。

putAll(Map map); 从指定映射中将所有映射关系复制到此映射中。

2.删除

void clear(); 从此映射中移除所有映射关系。

v remove(key); 如果存在一个键的映射关系,则将其从此映射中移除。

3.判断

boolean containsKey(Object o); 如果此映射包含指定键的映射关系,则返回 true。

boolean containsValue(Object o); 如果此映射将一个或多个键映射到指定值,则返回 true。

boolean isEmpty(); 如果此映射未包含键-值映射关系,则返回 true。

4.获取

V get(key); 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

int size(); 返回此映射中的键-值映射关系数。

Map

|--Hashtable:哈希表结构,是同步的,不允许null键、null值;。

|--HashMap:哈希表结构,是不同步的,允许null键、null值;。

|--TreeMap:二叉树结构,是不同步的。可以对map集合中的键进行排序

https://blog.csdn.net/weixin_33782296/article/details/112085846

标签:Java,映射,--,元素,collection,集合,架构师,排序
From: https://www.cnblogs.com/sunny3158/p/16853316.html

相关文章

  • Java中“成员变量,局部变量,静态变量”三者区别说明
    转自:http://java265.com/JavaCourse/202111/1728.html下文笔者讲述java中成员变量,局部变量,静态变量的不同之处,如下所示: 成员变量局部变量静态变量定义位置......
  • java命令行如何编译运行带package(包)的程序
    先用javac编译,带参数-djavac-d.****.java 然后,在当前目录下(不要到****子目录),运行java即可。java***.*****如:javac-d.FuctionDemo2.javajavacom.Fuct......
  • 开发语言介绍——Java
    开发语言介绍——Java一、基本说明1.Java语法的特点关键字都是小写字母标识符没有长度限制使用Unicode编码Java是一种强类型的语言,变量在编译之前一定要被显示的声明......
  • 如何从 Java 的 List 中删除第一个元素 remove
    如何从Java的List中删除第一个元素remove概述在这个实例中,我们将会演示如何删除在Java中定义的List的第1个元素。我们将会针对这个问题使用List接口的......
  • Java获取当前环境
    配置环境spring.profiles.active=dev获取当前环境方法一通过@Value注解获取@Value("${spring.profiles.active}")privateStringenv;方法二在配置文件中通过env......
  • Java函数式编程(1):Lambda表达式(1)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ Java在其技术发展周期中经历过几次比较重要的变化,如果不是这几次比较重要的变化,恐怕不会有现在这样的江湖地位。个人看......
  • Java Instrumentation
    前言JDK1.5开始,Java新增了Instrumentation(JavaAgentAPI)和JVMTI(JVMToolInterface)功能,允许JVM在加载某个class文件之前对其字节码进行修改,同时也支持对......
  • Java面向对象
    面向过程&面向对象思想面向过程:将一件事情步骤化(只适合处理较为简单的问题)面向对象:思考问题会将问题进行分类,再对分类进行单独思考。最后才会对某个分类下的细......
  • Java基础
    常见快捷键全选ctrl+a复制ctrl+c粘贴ctrl+v撤销ctrl+z保存ctrl+s关闭窗口alt+F4永久删除shfit+Delete常用DOS命令盘符切换d;查看当前目录下的所有文......
  • Java RMI分析与利用
    一.RMI介绍RMI(RemoteMethodInvocation)远程方法调用,顾名思义,是一种调用远程位置的对象来执行方法的思想。在Java中,我们通常传递一个完整的对象,这个对象既包含数据......