Java中的数据结构 | 常用API | 机制(每日更新)

0.基石 | 机制

0.-1 Java中的面向对象

0.0 Java的流、文件、I O

文件

Scanner

0.1 Java中基本数据类型取值范围

Number类

Math类

0.2 Java中的强转和进制转换

0.3 Java中的泛型

介绍

Java中的泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

在这里插入图片描述——来自:菜鸟教程

泛型方法

泛型方法,该方法在调用时可以接受不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。

定义泛型方法的规则:

  • 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前
  • 每一个类型参数声明部分包含一个或多个类型参数,参数之间啊用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。。
  • 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
  • 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(比如 int、double、char 等)。

Java 中泛型标记符:

  • E-Element (集合中的元素)
  • T-Type (Java类)
  • K-Key (键)
  • V-Value (值)
  • N-Number (数值类型)
  • ?-表示不确定的Java类型

实例:

public class GenericMethodTest
{
	// printArray
	public static < E > void printArray ( E[] inputArray)
	{
	 	// 
	 	for( E element : inputArray){
	 		System.out.printf("%s",element);
	 		}
	 	System.out.println();
	 }

	public static void main (String args[]){

		//create diffrent type of arrarys : Integer, Double ,Character
		Integer [] intArray={1,2,3};
		Double [] doubleArrary = ……
		……
		and so on

		next we could print theses arrays by using printArray
		


	}
}

有界的类型参数

可能有时候,你会想限制那些被允许传递到一个类型参数的类型种类范围。例如,一个操作数字的方法可能只希望接受Number或者Number子类的实例。这就是有界类型参数的目的。

要声明一个有界的类型参数,首先列出类型参数的名称,后跟extends关键字,最后紧跟它的上界

实例:

public class MaximumTest
{
	//比较三个值返回最大值
	public static <T extends Comparable<T> > T maximum(T x,T y ,T z )
	{
		T max = x;
		if(y.compareTo(max) > 0 ){
	 		max = y;
	 	}
	 	if(z.compareTO(max) > 0){
	 		max = z;
		 }
		 
	 return max;
	 
	 }
	 
	 public static void main (String args[])
	 {
	
		sout( "%d, %d 和 %d 中最大的数为 %d\n\n",
                   3, 4, 5, maximum( 3, 4, 5 ))
	 }

}

0.4 Iterator 迭代器

介绍

Java迭代器是Java集合框架中的一种机制,用于遍历集合(如:列表、集合和映射等)的接口。它提供了一种统一的方式来访问集合中的元素,而不需要了解底层集合的具体实现细节。
Java Iterator 不是一个集合,是一种方法。Iterator是Java迭代器最简单的实现,ListIterator是CollectionAPI中的接口,扩展了Iterator接口。
在这里插入图片描述
迭代器接口定义了几个方法,最常用的是以下三个:

  • next() - 返回迭代器的下一个元素,并将迭代器的指针移到下一个位置。
  • hasNext() - 用于判断集合中是否还有下一个元素可以访问。
  • remove() - 从集合中删除迭代器最后访问的元素。
    Iterator 类位于java.util包中,使用前需要引入它。

通过迭代器,我们可以逐个访问集合中的元素,而不需要使用传统的for循环或者索引。这种方式更加简洁和灵活,并且适用于各种类型的集合。

获取一个迭代器

import java.util.ArrayList;
import java.tuil.Iterator;

public class RunoobTest{
	public static void main(String []arg)
	{
		ArrayList <String> sites = new ArrayList<String>();
		sites.add("Google");
		sites.add("Baidu");
		
		//实例化集合的迭代器接口
		Iterator<String> it = sites.iterator();
		System.out.print(it.next());
		

返回所有集合中的元素:
代码:

while(it.hasNext())
{
 System.out.println(it.next());
 }
// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;

public class RunoobTest {
    public static void main(String[] args) {

        // 创建集合
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Zhihu");

        // 获取迭代器
        Iterator<String> it = sites.iterator();

        // 输出集合中的所有元素
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

删除操作

// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        numbers.add(12);
        numbers.add(8);
        numbers.add(2);
        numbers.add(23);
        Iterator<Integer> it = numbers.iterator();
        while(it.hasNext()) {
            Integer i = it.next();
            if(i < 10) {  
                it.remove();  // 删除小于 10 的元素
            }
        }
        System.out.println(numbers);
    }
}

注意点

PS: 使用迭代器集合的时候,如果在遍历过程中对集合进行了修改比如增删,可能会导致一个异常:ConcurrentModificationException,为了避免这个问题,可以使用迭代器自身的 remove()方法进行删除操作。

而且迭代器是一种单向遍历机制,只能从前往后遍历集合中的元素,不能往回遍历。同时,在使用迭代器遍历集合时,不能直接修改集合中的元素,而是需要使用迭代器的remove()方法删除当前元素。

0.41 Iterable

iterator为迭代器对象,而Iterable则是对iterator的封装

0.5 循环结构(提炼重点)

关于 for 循环有以下几点说明:

  • 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
  • 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
  • 执行一次循环后,更新循环控制变量。
  • 再次检测布尔表达式。循环执行上面的过程。

在 Java5 中引入了一种主要用于数组的增强型 for 循环。

for(声明语句 : 表达式)
{
   //代码句子
}

声明语句:声明新的局部变量该变量的类型必须和数组元素类型匹配。作用域限定在循环语句块,其值与此时数组元素的值相等。

表达式:访问的数组名,或者是返回值为数组的方法。

1.数组和集合API

在这里插入图片描述

1.0 Java数组 Array

1.1 Java集合 Collection And Map

  • 继承图

Collection---->Collections Map----->SortedMap------>TreeMap

Collection---->List----->(Vector \ ArryList \ LinkedList) Map------>HashMap

Collection---->Set------>(HashSet \ LinkedHashSet \ SortedSet)
在这里插入图片描述

通常来讲集合下面包含两大类:

  • 单列-Colletion 双列-Map
  • Collection-单列
    • 可重复 List
    • (ArrayList、LinkedList、Vector)
    • 不可重复 Set
    • (HashSet(无序)、LinkedHash(添加顺序)、TreeSet(自然顺序))
  • Map-双列(键值对)
    • HashTable
    • HashMap
    • LinkedHashMap
    • WeakHashMap
    • TreeMap
    • IdentifyHashMap

1.1.1 Collection接口

List集合

List中主要有ArrayList、LinkedList两个实现类;Set中则是有HashSet实现类;而Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在。

  • List 常用方法
A:添加功能
boolean add(E e):向集合中添加一个元素
void add(int index, E element):在指定位置添加元素
boolean addAll(Collection<? extends E> c):向集合中添加一个集合的元素。

B:删除功能
void clear():删除集合中的所有元素
E remove(int index):根据指定索引删除元素,并把删除的元素返回
boolean remove(Object o):从集合中删除指定的元素
boolean removeAll(Collection<?> c):从集合中删除一个指定的集合元素。

C:修改功能
E set(int index, E element):把指定索引位置的元素修改为指定的值,返回修改前的值。

D:获取功能
E get(int index):获取指定位置的元素
Iterator iterator():就是用来获取集合中每一个元素。

E:判断功能
boolean isEmpty():判断集合是否为空。
boolean contains(Object o):判断集合中是否存在指定的元素。
boolean containsAll(Collection<?> c):判断集合中是否存在指定的一个集合中的元素。

F:长度功能
int size():获取集合中的元素个数

G:把集合转换成数组
Object[] toArray():把集合变成数组。

asList
String[] arr = {"apple", "banana", "orange"};
List<String> list = Arrays.asList(arr);

1.1.2 Map接口

1.2 工具类:Collections和Arrays

  • 它们提供提供了封装器实现(Wrapper Implementations)、数据结构算法和数组相关的应用

常用方法

  • binarySearch:二分查找

  • sort:归并排序

  • reverse:将线性表进行逆序操作

  • rotate:以某个元素为轴心将线性表“旋转”

  • swap:交换一个线性表中两个元素的位置

2.栈相关API(相关实现已由Deque负责)

2.1 Stack

创建一个栈,相关方法

 Stack<Object> stack = new Stack<>();
 stack.push(Object);
 stack.pop();
 stack.peek();//查看栈顶元素
 stack.size();
 stack.empty();//返回值为 true or false

2.x Deque 如何作为栈使用?-ArrayDeque

  • 特点
    • 容量不限(可变数组)
    • 线程不安全的,没有外部同步的情况下不能在多线程中使用
    • 作为栈来使用,效率比Stack高,作为队列使用,比LinkedList效率高
    • 不支持null值
  • 继承关系

在这里插入图片描述

3.队列相关API

3.1Queue

Queue是实现队列的接口
在这里插入图片描述首先,Queue接口是常用API,继承自Collection 接口

常用的实现类

  • LinkedList 和 PriorityQueue

常用六种方法

(不满足条件时:前者抛异常,后者返回特殊值):

  • 压入元素(添加):add()、offer()

    • 相同:未超出容量,从队尾压入元素,返回压入的那个元素。
    • 区别:在超出容量时,add()方法会对抛出异常,offer()返回false
  • 弹出元素(删除):remove()、poll()

    • 相同:容量大于0的时候,删除并返回队头被删除的那个元素。
    • 区别:在容量为0的时候,remove()会抛出异常,poll()返回false
  • 获取队头元素(不删除):element()、peek()

    • 相同:容量大于0的时候,都返回队头元素。但是不删除。
    • 区别:容量为0的时候,element()会抛出异常,peek()返回null。

每一个队列的实现必须指定其顺序属性(按先后顺序排;按递增(自然)顺序排)

并发情况

然而Queue接口并未定义阻塞队列的方法

BlockingQueue 定义了那些等待元素出现或者等待队列中有可用空间的方法

补充

1.null值通常不被允许插入,除了在少数实现中
2.Queue实现通常未定义equals和hashCode方法的基于元素的版本,而是从Object类中继承了基于身份的版本

3.1.2 双端队列-Deque

首先Deque 也是一个接口,继承自 Queue

Deque 实现类

  • LinkedList,ArrayDeque,LinkedBlockingDeque

Deque 方法

boolean add(E e);在队列尾部添加一个元素 成功返回true 失败抛出异常
boolean offer(E e);在队列尾部添加一个元素 成功返回true 失败返回false
E remove();取出队列的第一个元素,并从队列中移除该元素,成功返回该元素,失败返回false,如果指定元素为空,抛出NullPointerException
E poll();取出队列第一个元素,并从队列中移除该元素,成功返回该元素,失败返回null。
E element();取出队列第一个元素,不移除,成功返回该元素,失败抛出异常
E peek(); 取出队列第一个元素,不移除,成功返回该元素,失败返回null。

Deque的独有方法

void addFirst(E e);在队列头部 添加一个元素,失败抛出异常
void addLast(E e);在队列尾部 添加一个元素,失败抛出异常
boolean offerFirst(E e);在队列头部 添加一个元素,成功返回true ,失败返回false
boolean offerLast(E e);在队列尾部 添加一个元素,成功返回true ,失败返回false
E removeFirst();取出队列的第一个元素,并移除该元素,成功返回该元素,失败抛出异常
E removeLast();取出队列的最后一个元素,并移除该元素,成功返回该元素,失败抛出异常
E pollFirst();取出队列的第一个元素,并移除该元素,成功返回该元素,失败返回null
E pollLast();取出队列的最后一个元素,并移除该元素,成功返回该元素,失败返回null
E getFirst();取出队列的第一个元素,不移除,成功返回该元素,失败抛出异常
E getLast();取出队列的最后一个元素,不移除,成功返回该元素,失败抛出异常
E peekFirst();取出队列的第一个元素,不移除,成功返回该元素,失败返回null
E peekLast();取出队列的最后一个元素,不移除,成功返回该元素,失败返回null
boolean removeFirstOccurrence(Object o);移除双向队列中第一个出现的该元素,成功返回true,失败抛出异常
boolean removeLastOccurrence(Object o);移除双向队列中最后一个出现的该元素,成功返回true,失败抛出异常
void push(E e);在双向队列头部 添加一个元素 ,失败抛出异常
E pop();取出队列的第一个元素,并移除该元素,队列为空时 抛出NoSuchElementException
boolean contains(Object o);判断队列中是否包含指定元素,包含返回true 否则返回false

4.字符串 API

4.1 StringBudiler & StringBuffer & String

5.树 和 相关API

6.图 和 相关API

正则表达式

Java 8

Java 11

Java 17

Java 21

Spring 常用接口

Model

1.数据校验

2.数据拉取

3.数据存储

开发常用接口

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目目目录 前言 第1章 计算机与网络安全基础 1 1.1 密码学与计算机安全 1 1.2 危险和保护 2 1.3 外围防护 3 1.3.1 防火墙 4 1.3.2 仅仅使用外围防护的不足之处 4 1.4 访问控制与安全模型 4 1.4.1 MAC和DAC模型 5 1.4.2 对数据和信息的访问 5 1.4.3 静态和动态模型 6 1.4.4 关于使用安全模型的几点考虑 6 1.5 密码系统的使用 7 1.5.1 单向散列函数 7 1.5.2 对称密码 8 1.5.3 非对称密码 9 1.6 鉴别 9 1.7 移动代码 10 1.8 Java安全性的适用范围 11 第2章 Java语言的基本安全特点 12 2.1 Java语言和平台 12 2.2 基本安全结构 13 2.3 字节代码验证和类型安全 14 2.4 签名应用小程序 15 2.5 关于安全错误及其修复的简要历史 16 第3章 JDK1.2安全结构 19 3.1 起源 19 3.2 为什么需要一个新型的安全结构 19 3.2.1 关于applet的沙盒模型的局限性 19 3.2.2 策略和实施分离的不彻底性 20 3.2.3 安全核查的不易扩展性 20 3.2.4 对本地安装的applet过于信任 20 3.2.5 内部安全机制的脆弱性 21 3.2.6 总结 21 3.3 java.Security.General SecurityException 21 3.4 安全策略 22 3.5 CodeSource 24 3.5.1 测试等同性和利用隐含 25 3.6 许可权层次 26 3.6.1 java.security.Permission 27 3.6.2 许可权集合 28 3.6.3 java.security.Unresolved Permission 29 3.6.4 java.io.FilePermission 31 3.6.5 java.net.SocketPermission 33 3.6.6 java.security.BasicPermission 35 3.6.7 java.util.PropertyPermission 36 3.6.8 java.lang.RuntimePermission 37 3.6.9 java.awt.AWTPermission 38 3.6.10 java.net.NetPermission 38 3.6.11 java.lang.reflect Reflect Permission 39 3.6.12 java.io .Serializable Permission 39 3.6.13 java.security.Security Permission 39 3.6.14 java.security.AllPermission 40 3.6.15 许可权隐含的隐含 40 3.7 分配许可权 41 3.8 Protection Domain 42 3.9 安全地加载类 44 3.9.1 类加载器的层次 44 3.9.2 java.lang.ClassLoader和授权 46 3.9.3 java.security.SecureClassLoader 49 3.9.4 java.net.URLClassLoader 49 3.9.5 类的路径 50 3.10 java.lang.SecurityManager 51 3.10.1 使用安全管理器的实例 51 3.10.2 JDK1.2没有改变的API 52 3.10.3 JDK1.2禁用的方法 53 3.11 java.security.AccessController 56 3.11.1 AceessController的界面设计 57 3.11.2 基础访问控制算法 57 3.11.3 继承方法 59 3.11.4 扩展带有特权操作的基本算法 59 3.11.5 特权操作的三种类型 61 3.11.6 访问控制语境 63 3.11.7 完整的访问控制算法 64 3.11.8 SecurityManager与 AccessController 65 3.11.9 特权操作发展史 66 3.12 小结 67 第4章 安全结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~Yogi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值