常用的数据结构 JAVA

目录

1、线性表

复制代码
List<Object> narnat = new ArrayList<>();

ArrayList:动态数组

1、可以嵌套使用

2、add(x)添加元素x,remove(index)删除某个位置的元素

3、注意list是指向性的,在不确定被指向元素是否会发生变动,最好复制一下被指向元素

复制代码
List<Integer> none  = new ArrayList<>();
List<List<Integer>>end  = new ArrayList<>();
end.add(new ArrayList<Integer>(none));
//为了防止none后续会变动,这里直接复制none

1、Java中List类应该主要是一些方法, 方法的实现应该是在ArrayList类中实现

类似下方的A类B类代码:

java 复制代码
import java.util.*;    
public class Main {         
    public static void main(String args[]) {        
    int array[] = {1, 2, 3};
    A<int []> xxf = new B<>();
    xxf.swapp(array);
    //xxf只能调用A类方法无法调用B类
    }
}


class A <T> {
	 public void swapp(T a) {
		 B<T> d = new B<T>();
		 d.address(a);
	 }
}
 
class B <T>  extends A <T> {
	 public void address(T a) {
	     System.out.println(a);
	 }
}

2、List类是一个接口类,所以不能面向对象自己,里面只存储与线性表相关的相关方法所以比较方便

3、而ArrayList类中存在与线性表无关的方法,为了防止用户调用到错误的方法,所以创建的对象是以List开头

代码:

java 复制代码
import java.util.*;    
public class Main {         
    public static void main(String args[]) {        
   	 
    A c = new B();
    A d = c;
    
    //d只能调用A类方法 
    
    
    B f = new B();
   //f,A, B方法都可以调用
    A g = f;
    //g也只能调用A类方法
     
    }
}


class A <T> {
	 public void swapp(T a) {
		 B<T> d = new B<T>(); 
		 d.address(a);
	 }
	 public void sxx() {
		 
	 }
}
 
class B <T>  extends A <T> {
	 public void address(T a) {
	     System.out.println(a);
	 }
}
复制代码
遇到:
public void map(List<Integer> qu){
}

List<Integer> xx = ArrayList<>();

map(xx);
我的理解是:
List<Integer> qu = xx = ArrayList<>();       

代码:

java 复制代码
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.util.*;
//需要将读书页面大小调至67%
public class Main {
 public static void main(String[] args) throws AWTException {
       ArrayList<Integer> qu = new ArrayList<>();
       swap(qu);
	   System.out.println(qu);
	  }
 public static void swap (List<Integer> aa) {
	 aa.add(1);
 } 
}
 
 

4、个人理解:qu是ArrayList类创建的,但传参 变成List aa = qu = ArrayList<>(); 朴素来理解即aa虽然是ArrayList生的,是List养的,所以受List限制

这里也证实qu和aa调用的函数范围是不同的:

2、栈:

复制代码
java推荐使用:

Deque stack = new ArrayDeque<Integer>();

Deque:双向队列

1、add(x)将x放在栈顶(最后),push(x)将x放在栈首(末尾)offer(x),将x放在栈首

2、peek()、poll()、peekFirst()、pollFirst()都是对首元素进行操作这是易错点

3、peekLast(), pollLast()才是对栈顶元素操作,这么设计因为可以当队列使用尽管一般队列不用它

3、队列:

复制代码
Queue qu = new LinkedList<Integer> ();

LinkedList : 链表

1、先进先出

2、peek(x) : 显示首部元素,poll():删掉并返还首部元素

4、HashMap:

复制代码
Map<Integer, Integer> map = new HashMap<>();

1、今天才发现HashMap是dfs剪枝的一款神器!!!

2、即利用map存储dfs已算过的值,防止重复的计算,以空间换时间

偷学网上大佬的代码:

太过优雅,一点没改:整数替换

1、map<key, value>

2、containKey(n):判断key内是否存有n

3、containValue(n):判断value内是否存有n

4、get(n):通过key值n找到value值m

5、put<key, value>:存入新值

相关推荐
Aotman_14 分钟前
JS 按照数组顺序对对象进行排序
开发语言·前端·javascript·vue.js·ui·ecmascript
indexsunny2 小时前
互联网大厂Java求职面试实战:Spring Boot微服务与Redis缓存场景解析
java·spring boot·redis·缓存·微服务·消息队列·电商
ID_180079054732 小时前
小红书笔记详情API接口基础解析:数据结构与调用方式
数据结构·数据库·笔记
无心水2 小时前
【分布式利器:腾讯TSF】7、TSF高级部署策略全解析:蓝绿/灰度发布落地+Jenkins CI/CD集成(Java微服务实战)
java·人工智能·分布式·ci/cd·微服务·jenkins·腾讯tsf
28岁青春痘老男孩7 小时前
JDK8+SpringBoot2.x 升级 JDK 17 + Spring Boot 3.x
java·spring boot
方璧7 小时前
限流的算法
java·开发语言
元Y亨H7 小时前
Nacos - 服务注册
java·微服务
Hi_kenyon8 小时前
VUE3套用组件库快速开发(以Element Plus为例)二
开发语言·前端·javascript·vue.js
曲莫终8 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言